-1

我正在尝试从嵌套列表中创建字典。但是,我遇到了将值附加到我的字典的问题,因为它们是字符串。有没有创造性的解决方案?也许将我的字符串分成另一个列表?

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'}]
4

3 回答 3

1

每个字典条目的值需要是另一个集合。一个列表或一个集合,取决于具有重复项的预期行为。

    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  ]

最后,可以使用a defaultdict(第一次引用时自动初始化key对应的值的字典)。

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

如果您稍后要使用字典来检查键的存在/不存在,则必须记住,defaultdict所有键始终存在(在查询时创建)。在这种情况下,最好的解决方案是将 复制defaultdict到常规的:

    my_regulardict= dict( my_defaultdict )
于 2013-08-30T21:25:27.917 回答
1
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    
于 2013-08-30T21:25:58.380 回答
0

这是一个案例collections.defaultdict

import collections

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

my_dict = collections.defaultdict(list)

for _, key, value in my_list:
    my_dict[key].append(value)

print(my_dict)

给我们:

defaultdict(<class 'list'>, {'topic2': ['content3'], 'topic1': ['content1', 'content2']})

defaultdict如果它不存在,则为值创建列表,这意味着我们可以通过循环列表并将值附加到键来非常容易地做到这一点。它在其他方面完全像普通字典一样,但如果你需要一个普通的字典,你可以使用dict()它。

于 2013-08-30T21:25:05.860 回答