gpt4 book ai didi

python - 在字典中映射值

转载 作者:行者123 更新时间:2023-12-04 21:29:07 26 4
gpt4 key购买 nike

我正在尝试将字典中的值映射到另一个字典中存在的键,

dict1 = {'CityA':'abc','CityB':'c-abc','CityC':'xyz'}

dict2 = {'abc':['abc','ABC','c-abc'],
'xyz':['xyz']}

如果 dict1 中的值出现在 dict2< 的值中,则字典 dict1 中的值应映射到 dict2 中的键

预期输出:

dict = {'CityA':'abc','CityB':'abc','CityC':'xyz'}

我不确定执行此操作的最佳方法是什么。

我正在尝试以下操作

for v in dict1.values():
if v in dict2.values(): # dict2.values() is a list containing list

循环遍历列表的项目(列表)是一种好方法吗?

或者是否有任何内置函数可以遍历列表中的所有项目包含列表?

有什么建议吗?

编辑:

dict1 =`{'CityA':['abc','xyz'],'CityB':'c-abc','CityC':['ABC','xyz']}

预期输出:

dict =`{'CityA':['abc','xyz'],'CityB':'abc','CityC':['abc','xyz']}

测试用例:如果某个字符串在dict2中没有映射,则该字符串应该保留在new_d中

dict1 = {'CityA': ['abc', 'xyz'], 'CityB': 'c-abc', 'CityC': ['ABC', 'xyz', 'ith']}

预期输出:

{'CityA': ['abc', 'xyz'], 'CityB': 'abc', 'CityC': ['abc', 'xyz', 'ith']}

获得的输出:

{'CityA': ['abc', 'xyz'], 'CityB': 'abc', 'CityC': ['abc', 'xyz']}

最佳答案

您可以使用嵌套理解:

dict1 = {'CityA':'abc','CityB':'c-abc','CityC':'xyz'}
dict2 = {'abc':['abc','ABC','c-abc'], 'xyz':['xyz']}
new_d = {a:[c for c, d in dict2.items() if b in d][0] for a, b in dict1.items()}

输出:

{'CityA': 'abc', 'CityB': 'abc', 'CityC': 'xyz'}

如果 dict2 中给定的键没有对应的值,您可以使用 lambda 来保留原始值:

dict1 = {'CityA': ['abc', 'xyz'], 'CityB': 'c-abc', 'CityC': ['ABC', 'xyz']}
dict2 = {'abc':['abc','ABC','c-abc'], 'xyz':['xyz']}
new_d = {a:(lambda x:b if not x else x[0] if len(x) == 1 else x)([c for c, d in dict2.items()
if (b in d if not isinstance(b, list) else any(j in d for j in b))]) for a, b in dict1.items()}

输出:

{'CityA': ['abc', 'xyz'], 'CityB': 'abc', 'CityC': ['abc', 'xyz']}

关于python - 在字典中映射值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57207165/

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