如何从这个元组列表中提取并转换成这个字典?

时间:2014-03-08 12:28:42

标签: python list python-2.7 dictionary

我有这个元组列表。

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])

1 个答案:

答案 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)