Python中两个不同长度列表的字典

2024-04-25 22:31:33 发布

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

问题是我应该如何从两个不同长度的列表中创建一个字典。我没有字典。我想创建字典。在

当我应用split方法时,我想用两个不同长度的列表创建一个字典。例如

 names
 Out[41]: 
 ['Georgie Porgie',
  'Queen St. Cafe',
  'Dumplings R Us',
  'Mexican Grill',
  'Deep Fried Everything']

  cuisines
  Out[42]: ['Canadian,Pub Food', 'Malaysian,Thai', 'Chinese', 'Mexican', 
  'Pub Food']

  cuisines_splited
  Out[43]: 
  [['Canadian', 'Pub Food'],
  ['Malaysian', 'Thai'],
  ['Chinese'],
  ['Mexican'],
  ['Pub Food']]

我想创建一个字典,使用菜系分割为键,名称为值。到目前为止我已经试过了,但没有给出正确的答案。在

^{pr2}$

所需输出为:

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

Tags: 列表字典cafefoodoutstpubchinese
2条回答

你需要有类似的列表开始。您需要在压缩和使用defaultdict时拆分。在

from collections import defaultdict

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

from collections import defaultdict

d = defaultdict(list)
for mk, v in zip(cuisines, names):
    for k in mk.split(','):
        d[k.strip()].append(v.strip())

print(d)

out:
defaultdict(<class 'list'>, {
    "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"]
})

您可以使用defaultdict对split和combine函数执行此操作

def split(names, cuisines):
    for name, cuisine in zip(names, cuisines):
        for c in cuisine.split(','):
            yield name, c
from collections import defaultdict
def combine(splits):
    result = defaultdict(list)
    for name, cuisine in splits:
        result[cuisine].append(name)
    return(result)
combine(split(names, cuisines))
^{pr2}$

相关问题 更多 >