[英]How to create a dictionary from a list of lists in python?
给定一个列表列表,我如何创建一个字典,其中键是列表中的所有项目(一个副本),值是它们是列表中第一项的次数?
鉴于:
[['banana', 'oranges', 'grapes'],['banana', 'grapes'],['grapes', 'oranges', 'banana']]
预期的:
{'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])
现在使用来自唯一元素和零值的键初始化字典:
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'],['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 你应该得到你的result
bool
是int
的子类这一事实用于将element == l[0]
评估为1
或0
如果没有collections
,您需要将最后一行编辑为:
try:
result[element] += (element == l[0])
except KeyError:
result[element] = 1
创建列表列表:
ll = [['banana', 'oranges', 'grapes'], ['banana', 'grapes'], ['grapes', 'oranges', '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', '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}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.