Python只按键添加到字典

2024-04-24 04:59:28 发布

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

假设我有一个城市(值)和人(键)。 城市可以有很多人。在

(例如): 代码:

cities = {'Berlin':{'Dan', 'john'},'Tokyo':{'John'}}
city_dict = {}
people = {}
for city in cities:
   ?

我想用python构造一个字典,它只在键之间发生匹配时插入。在

(例如期望的结果):

^{pr2}$

谢谢。在


Tags: 代码incityfor字典johnpeopledict
3条回答

你不能有一个字典有重复的关键字,比如@DeepSpace,所以对于你的问题,我可以建议你以下的替代方法。 使用一本有人名的字典来查找关键字和城市的价值。所以当你想把两者结合起来创建一个列表元组时。在

people = {"Dan": ["Berlin","San Francisco"], "Mario": ["Rome"]}

for name, locations in people:
  #combine name with single city if needed
  for city in locations:
    tuple_tmp = (name,city)
    #next store it, print it,...

这种方法的缺点是:

  • 你需要处理这些值
  • 如果你有城市和想要检索所有的名字在这一个是非常缓慢的操作。 你可以用反向关系来维护另一个结构,但这会消耗内存。在

根据定义,字典不能包含重复的键,因此无法获得所需的结果。在

但是,您可以执行以下操作(这在某种程度上接近于您想要的输出):

from collections import defaultdict

cities = {'Berlin': {'Dan', 'John'}, 'Tokyo': {'John'}}
output = defaultdict(set)

for city, names in cities.items():
    for name in names:
        output[name].add(city)
print(output)
# defaultdict(<class 'set'>, {'Dan': {'Berlin'}, 'John': {'Berlin', 'Tokyo'}})

其他选项,没有依赖项和返回城市列表:

cities = {'Berlin':{'Dan', 'John'},'Tokyo':{'John', 'Paul'}, 'Liverpool':{'John', 'Paul', 'George', 'Ringo'}, 'Colorado':{'Ringo'} }

res = {}
for k, v in cities.items():
  for e in v:
    res.setdefault(e,[]).append(k)

print(res)
#=> {'Dan': ['Berlin'], 'John': ['Berlin', 'Tokyo', 'Liverpool'], 'Paul': ['Tokyo', 'Liverpool'], 'Ringo': ['Liverpool', 'Colorado'], 'George': ['Liverpool']}

相关问题 更多 >