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

给出一个列表列表,如何创建一个字典,其中键是列表中的所有项目(一个副本),并且值是它们是列表中第一项的次数?

给出:

[['banana','oranges','grapes'],['banana',['grapes','banana']]

预期:

{'banana': 2,'grapes': 1,'oranges': 0}
jscj5678 回答:如何从python中的列表列表创建字典?

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

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}

最后用过滤列表中每个元素的频率更新字典的值。由于您询问的解决方案不包含counter,因此这里有一个简单的循环可以实现:

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','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 而且您应该将结果放在result

boolint的子类这一事实用于将element == l[0]评估为10

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

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

创建列表列表:

ll = [['banana','banana']]

获取唯一密钥:

from itertools import chain

d = dict.fromkeys(chain(*ll),0)

计算列表的第一个元素:

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}
,

之前的所有回复对我来说都失败了。这是一个非常快速的实现:

# l is a list of lists
import itertools
ext_l = list(itertools.chain.from_iterable(l))
l_dic = {element:0 for element in set(ext_l)}
for i in ext_l: l_dic[i] += 1
print(l)
,

简单的实现

l = [['banana','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,'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,'oranges': 0}
本文链接:https://www.f2er.com/3120248.html

大家都在问