具有嵌套Lis中的多个值的字典

2024-04-26 18:53:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从嵌套列表创建词典。但是,我遇到了一个问题,在字典中添加值是因为它们是字符串。有没有创造性的解决办法?或许可以把我的字符串分成另一个列表?你知道吗

my_list = [('key1', 'topic1', 'content1'), ('key2', 'topic1', 'content2'), ('key3', 'topic2', 'content3')]

my_dict = {}
for list in my_list:
    for val in list:
        if list[1] in my_dict:
            my_dict[list[1]].append(list[2])
        else:
            my_dict[i[1]] = i[2] 

我试着回来:

[{'topic1': 'content1', 'content2'}, {'topic2': 'content3'}]

Tags: 字符串in列表for字典mydictlist
2条回答
my_list = [('key1', 'topic1', 'content1'), ('key2', 'topic1', 'content2'), ('key3', 'topic2', 'content3')]

result={}
for t in my_list:
    result.setdefault(t[1],[]).append(t[2])

print result    

每个字典条目的值必须是另一个集合。一个列表或集合,取决于重复项的预期行为。你知道吗

    my_dict = {}
    for list in my_list:
        if list[1] in my_dict:
            my_dict[list[1]].append(list[2])
        else:
            my_dict[list[1]]= [ list[2]  ]

这是最接近您的当前代码。稍微改进的版本是:

    my_dict = {}
    for triplet in my_list:
        if triplet[1] in my_dict:
            my_dict[triplet[1]].append(triplet[2])
        else:
            my_dict[triplet[1]]= [ triplet[2]  ]

假设list已经被语言使用,并且my_list元素不是列表而是元组(在特定情况下是三元组)。出于同样的原因,你也可以写:

    my_dict = {}
    for _, my_key, my_value in my_list:
        if my_key in my_dict:
            my_dict[my_key].append(my_value)
        else:
            my_dict[my_key]= [ my_value  ]

最后,您可以使用defaultdict(一个字典,它在第一次引用键时自动初始化对应的值)。你知道吗

    my_dict = collections.defaultdict(list)
    for _, my_key, my_value in my_list:
        my_dict[my_key].append(my_value)

如果以后要使用字典检查是否有键,则必须记住,对于defaultdict,所有键都始终存在(在查询时创建)。在这种情况下,最好的解决方案是将defaultdict复制到一个常规的defaultdict中:

    my_regulardict= dict( my_defaultdict )

相关问题 更多 >