Python 如何从列表列表创建字典键?
字符串列表:Python 如何从列表列表创建字典键?,python,list,dictionary,defaultdict,setdefault,Python,List,Dictionary,Defaultdict,Setdefault,字符串列表: ['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'] 我正在尝试从上面的列表中创建
['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']
我正在尝试从上面的列表中创建一个美食到名字的词典。菜系在索引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:unhabable类型:“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)
问题是,变量CURINE是一个列表,您试图将其用作字典的键,请执行以下操作:
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']}
如果l是您的列表,您可以执行以下操作:
l=['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={l[i]:l[i+3] if type(l[i+3])==list else [l[i+3]] for i in range(0,len(l),4)}
>>>print(res)
{'Georgie Porgie': ['Canadian', 'Pub Food'], 'Queen St. Cafe': ['Malaysian', 'Thai'], 'Dumplings R Us': ['Chinese'], 'Mexican Grill': ['Mexican'], 'Deep Fried Everything': ['Pub Food']}