[英]Convert two lists to dictionary with values as list
我可以将两个列表转换成字典
>>> keys = ['a', 'b', 'c']
>>> values = [1, 2, 3]
>>> dictionary = dict(zip(keys, values))
>>> print dictionary
如何使用键但值作为列表将其转换为字典。
keys = ['a', 'b', 'c' ,'a']
values=[1, 2, 3, 4]
输出:
{'a': [1,4], 'c': [3], 'b': [2]}
我在依赖解析器中使用它来获取文本中名词的对应形容词。 注意我必须对大量文本执行此操作,因此效率很重要。
请同时说明进近的计算时间。
我只是简单地遍历键/值对,然后使用setdefault
将它们添加到字典中:
>>> keys = ['a', 'b', 'c' ,'a']
>>> values=[1, 2, 3, 4]
>>> d = {}
>>> for k,v in zip(keys, values):
... d.setdefault(k, []).append(v)
...
>>> d
{'c': [3], 'b': [2], 'a': [1, 4]}
假设两个列表的长度相同:
>>> import collections
>>> keys = ['a', 'b', 'c' ,'a']
>>> values = [1, 2, 3, 4]
>>> r = collections.defaultdict(list)
>>> for i, key in enumerate(keys):
... r[key].append(values[i])
itertools.groupby
函数获取一个列表并将相邻的相同元素分组在一起。 我们需要对压缩列表进行排序,以确保相等的键最终彼此相邻。
import itertools
keys = ['a', 'b', 'c', 'a']
values = [1, 2, 3, 4]
data = sorted(zip(keys, values))
dictionary = {}
for k, g in itertools.groupby(data, key=lambda x: x[0]):
dictionary[k] = [x[1] for x in g]
print(dictionary)
# {'c': [3], 'b': [2], 'a': [1, 4]}
可能有更好的方法可以做到这一点。 但这是一种解决方案:
keys = ['a', 'b', 'c' ,'a']
values=[1, 2, 3, 4]
combined = {}
for k, v in zip(keys, values):
l = combined.get(k, [])
l.append(v)
combined[k] = l
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.