gpt4 book ai didi

python - 如何从列表列表创建字典键?

转载 作者:行者123 更新时间:2023-12-04 00:52:32 26 4
gpt4 key购买 nike

字符串列表:

['Georgie Porgie', 87, '$$$', ['Canadian', 'Pub Food'], 'Queen St. Cafe', 82, '$', ['Malaysian', 'Thai'], 'Dumplings R Us', 71, '$', 'Chinese', 'Mexican Grill', 85, '$$', 'Mexican', 'Deep Fried Everything', 52, '$', 'Pub Food']

我正在尝试从上面的列表中创建一个 cuisine_to_names 字典。这些美食在索引 3 中,有时是它们自己的迷你列表。餐厅名称位于索引 0。它们每隔四个索引重复一次。美食 - 3::4,名称 - 0::4。

我遇到的问题是从索引 3::4 中提取元素并使它们成为键。我认为问题来了,因为有时它们是一个迷你字符串列表,有时它们只是一个字符串。这让我很难使用 defaultdict,但我是学习该功能的新手。我看到其他一些答案包括 setdefault 之类的内容,但我不知道如何在这种特定情况下使用它。任何指导将不胜感激!

我想要这样的输出:

Cuisine to list of restaurant names:
# dict of {str, list of str}
{'Canadian': ['Georgie Porgie'],
'Pub Food': ['Georgie Porgie', 'Deep Fried Everything'],
'Malaysian': ['Queen St. Cafe'],
'Thai': ['Queen St. Cafe'],
'Chinese': ['Dumplings R Us'],
'Mexican': ['Mexican Grill']}

我尝试了这个并得到了 TypeError: unhashable type: 'list':

from collections import defaultdict

cuisine_to_name = defaultdict(list)
for cuisine, name in zip(contents_list_2[3::4], contents_list_2[::4]):
cuisine_to_name[cuisine].append(name)

print(cuisine_to_name)

最佳答案

问题是变量 cuisine 是一个列表,而您正试图将其用作字典的键,改为这样做:

import pprint
from collections import defaultdict

data = ['Georgie Porgie', 87, '$$$', ['Canadian', 'Pub Food'],
'Queen St. Cafe', 82, '$', ['Malaysian', 'Thai'],
'Dumplings R Us', 71, '$', 'Chinese',
'Mexican Grill', 85, '$$', 'Mexican',
'Deep Fried Everything', 52, '$', 'Pub Food']

res = defaultdict(list)
for v, k in zip(data[::4], data[3::4]):
ks = k if isinstance(k, list) else [k]
for ki in ks:
res[ki].append(v)

pprint.pprint(dict(res))

输出

{'Canadian': ['Georgie Porgie'],
'Chinese': ['Dumplings R Us'],
'Malaysian': ['Queen St. Cafe'],
'Mexican': ['Mexican Grill'],
'Pub Food': ['Georgie Porgie', 'Deep Fried Everything'],
'Thai': ['Queen St. Cafe']}

关于python - 如何从列表列表创建字典键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65398346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com