Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从python中的列表列表创建字典?_Python_Python 3.x_List_Dictionary - Fatal编程技术网

如何从python中的列表列表创建字典?

如何从python中的列表列表创建字典?,python,python-3.x,list,dictionary,Python,Python 3.x,List,Dictionary,给定一个列表列表,如何创建一个字典,其中键是列表中的所有项(一个副本),值是它们作为列表中第一项的次数 鉴于: [['banana', 'oranges', 'grapes'],['banana', 'grapes'],['grapes', 'oranges', 'banana']] 预期: {'banana': 2, 'grapes': 1, 'oranges': 0} 简单实现 l = [['banana', 'oranges', 'grapes'],['banana', 'grapes

给定一个列表列表,如何创建一个字典,其中键是列表中的所有项(一个副本),值是它们作为列表中第一项的次数

鉴于:

[['banana', 'oranges', 'grapes'],['banana', 'grapes'],['grapes', 'oranges', 'banana']]
预期:

{'banana': 2, 'grapes': 1, 'oranges': 0}
简单实现

l = [['banana', 'oranges', 'grapes'],['banana', 'grapes'],['grapes', 'oranges', 'banana']]
unique_items = set([i for sl in l for i in sl])
d = dict()
for item in unique_items:
    d[item] = 0

for sublist in l:
    d[sublist[0]] += 1

print(d)
# output
# {'grapes': 1, 'oranges': 0, 'banana': 2}
维持秩序

d = dict()
for sl in l:
    d[sl[0]] = d.get(sl[0],0) + 1
print(d)
# {'banana': 2, 'grapes': 1}

unique_items = set([i for sl in l for i in sl])
for item in unique_items:
    if item not in d:
        d[item] = 0
print(d)
# {'banana': 2, 'grapes': 1, 'oranges': 0}
简单实现

l = [['banana', 'oranges', 'grapes'],['banana', 'grapes'],['grapes', 'oranges', 'banana']]
unique_items = set([i for sl in l for i in sl])
d = dict()
for item in unique_items:
    d[item] = 0

for sublist in l:
    d[sublist[0]] += 1

print(d)
# output
# {'grapes': 1, 'oranges': 0, 'banana': 2}
维持秩序

d = dict()
for sl in l:
    d[sl[0]] = d.get(sl[0],0) + 1
print(d)
# {'banana': 2, 'grapes': 1}

unique_items = set([i for sl in l for i in sl])
for item in unique_items:
    if item not in d:
        d[item] = 0
print(d)
# {'banana': 2, 'grapes': 1, 'oranges': 0}

首先获取第一个元素的列表:

filtered_list = [x[0] for x in initial_list]
unique_elements = set([y for x in initial_list for y in x])
以下是您独特的元素:

filtered_list = [x[0] for x in initial_list]
unique_elements = set([y for x in initial_list for y in x])
现在,使用来自唯一元素和零值的键初始化字典:

counts = {e: 0 for e in unique_elements}
最后,使用过滤列表中每个元素的频率更新字典的值。由于您要求的是一个不带计数器的解决方案,下面是一个简单的循环:

for i in filtered_list:
    counts[i] = counts.get(i, 0) + 1

print(counts)
# {'banana': 2, 'grapes': 1, 'oranges': 0}

首先获取第一个元素的列表:

filtered_list = [x[0] for x in initial_list]
unique_elements = set([y for x in initial_list for y in x])
以下是您独特的元素:

filtered_list = [x[0] for x in initial_list]
unique_elements = set([y for x in initial_list for y in x])
现在,使用来自唯一元素和零值的键初始化字典:

counts = {e: 0 for e in unique_elements}
最后,使用过滤列表中每个元素的频率更新字典的值。由于您要求的是一个不带计数器的解决方案,下面是一个简单的循环:

for i in filtered_list:
    counts[i] = counts.get(i, 0) + 1

print(counts)
# {'banana': 2, 'grapes': 1, 'oranges': 0}

可以使用集合获取子列表中存在的唯一名称:

initial_list = [['banana', 'oranges', 'grapes'],['banana', 'grapes'],['grapes', 'oranges', 'banana']]

unique = set()

for l in initial_list:
    unique = unique.union(set(l))
然后计算每个项目存在的列表数量,假设每个项目存在或不存在,而不是重复:

from collections import defaultdict

result = defaultdict(lambda: 0)
for element in unique:
    for l in initial_list:
        result[element] += (element == l[0])
Defaultict用于获取初始值0 你应该有你的结果

bool是int的子类这一事实用于将element==l[0]计算为1或0

如果没有集合,则需要将最后一行编辑为:

try:
    result[element] += (element == l[0])
except KeyError:
    result[element] = 1

可以使用集合获取子列表中存在的唯一名称:

initial_list = [['banana', 'oranges', 'grapes'],['banana', 'grapes'],['grapes', 'oranges', 'banana']]

unique = set()

for l in initial_list:
    unique = unique.union(set(l))
然后计算每个项目存在的列表数量,假设每个项目存在或不存在,而不是重复:

from collections import defaultdict

result = defaultdict(lambda: 0)
for element in unique:
    for l in initial_list:
        result[element] += (element == l[0])
Defaultict用于获取初始值0 你应该有你的结果

bool是int的子类这一事实用于将element==l[0]计算为1或0

如果没有集合,则需要将最后一行编辑为:

try:
    result[element] += (element == l[0])
except KeyError:
    result[element] = 1
创建列表列表:

ll = [['banana', 'oranges', 'grapes'], ['banana', 'grapes'], ['grapes', 'oranges', 'banana']]
from collections import Counter
from operator import itemgetter

c = Counter(map(itemgetter(0), ll))
获取唯一密钥:

from itertools import chain

d = dict.fromkeys(chain(*ll), 0)
统计列表的第一个元素:

ll = [['banana', 'oranges', 'grapes'], ['banana', 'grapes'], ['grapes', 'oranges', 'banana']]
from collections import Counter
from operator import itemgetter

c = Counter(map(itemgetter(0), ll))
更新并显示结果:

d.update(dict(c))
print(d)
印刷品:

{'banana': 2, 'oranges': 0, 'grapes': 1}
创建列表列表:

ll = [['banana', 'oranges', 'grapes'], ['banana', 'grapes'], ['grapes', 'oranges', 'banana']]
from collections import Counter
from operator import itemgetter

c = Counter(map(itemgetter(0), ll))
获取唯一密钥:

from itertools import chain

d = dict.fromkeys(chain(*ll), 0)
统计列表的第一个元素:

ll = [['banana', 'oranges', 'grapes'], ['banana', 'grapes'], ['grapes', 'oranges', 'banana']]
from collections import Counter
from operator import itemgetter

c = Counter(map(itemgetter(0), ll))
更新并显示结果:

d.update(dict(c))
print(d)
印刷品:

{'banana': 2, 'oranges': 0, 'grapes': 1}

这回答了你的问题吗?如果您的问题得到回答,请将最有用的答案标记为已接受。谢谢。这回答了你的问题吗?如果您的问题得到回答,请将最有用的答案标记为已接受。谢谢。有没有办法不用收款或柜台就可以做到这一点。可能只是一个简单的for循环?可以改变顺序吗?就像先是香蕉,然后是葡萄,然后是橙子一样。@PotionSeller插入顺序保持。您需要更改插入顺序。是否有方法在不使用集合或计数器的情况下执行此操作。可能只是一个简单的for循环?可以改变顺序吗?就像先是香蕉,然后是葡萄,然后是橙子一样。@PotionSeller插入顺序保持。您需要更改插入顺序。