比方说,我有一座城市(价值)和人(钥匙)。 1个城市可以有很多人。
(例如。): 代码:
cities = {'Berlin':{'Dan', 'john'},'Tokyo':{'John'}}
city_dict = {}
people = {}
for city in cities:
?
我想用python构造一个字典,仅在键之间出现匹配时才插入。
(例如所需的结果。):
{'dan' : {'dan':'berlin','dan':'colorado'},'john' : {'john':'berlin','john':'Tokyo'}}
谢谢。
答案 0 :(得分:3)
期望的结果无法实现,因为按照定义,词典不能包含重复的键。
但是,您可以执行以下操作(某种程度上接近您想要的输出):
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'}})
答案 1 :(得分:2)
其他选项,没有依赖项并且返回城市列表:
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']}
答案 2 :(得分:1)
您不能在字典中指定重复的键,例如@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,...
这种方法的缺点是: