我有这个元组列表。
List = [('id1', 'name1', 'date1'), ('id1', 'name2', 'date2'), ('id2', 'name3', 'date3'), ('id2', 'name4', 'date4')]
我想要一个将list转换为字典的函数
Dict = convert('id1', List)
Dict的内容是{'id1':('name1', 'name2')}
第一个参数根据第一个元素过滤掉感兴趣的元组。它也是输出字典的关键。每个元组的第二个元素将成为输出字典的值。
我在Python中编写了一个小函数,它不起作用。如果你有更好的建议,非常感谢你的帮助。忘了我的功能,如果它太远,我想是的。以pythonic方式解决它是非常受欢迎的。我使用的是Python 2.7
def convertToDict(key, List):
for key in List[0]:
DictOut = {key:[]}
DictOut[key].append(List[0])
答案 0 :(得分:3)
您无条件地替换DictOut
。相反,你应该像这样使用setdefault
DictOut.setdefault(key, [])
您的程序可以像这样编写
def convertToDict(my_list):
result_dict = {}
for item in my_list:
result_dict.setdefault(item[0], []).append(item[1])
return result_dict
print convertToDict(my_list)
# {'id2': ['name3', 'name4'], 'id1': ['name1', 'name2']}
如果您只想获取特定密钥。你可以用这个
def convertToDict(key, my_list):
result_dict = {}
for item in my_list:
if item[0] == key:
result_dict.setdefault(item[0], []).append(item[1])
return result_dict
print convertToDict("id1", my_list)
# {'id1': ['name1', 'name2']}
您可以实际使用collections.defaultdict
来实现此目的,例如
from collections import defaultdict
def convertToDict(key, my_list):
result_dict = defaultdict(list)
for item in my_list:
if item[0] == key:
result_dict[item[0]].append(item[1])
return result_dict
print convertToDict("id1", my_list)