以下是测试代码:
dict1 = {'k1': '{v1}', 'k2':'{v2}', 'k3':'{v3}' , 'k3':'{v4}'}
list1 = ['k1_1', 'k2_2', 'k3_3', 'k3_4']
newdict = {}
for items in list1:
val = items.split('_')[0]
if val in dict1.keys():
newdict[items] = dict1[val]
这会产生:
{'k1_1': '{v1}', 'k2_2': '{v2}', 'k3_3': '{v4}', 'k3_4': '{v4}'}
我真正想要的是:
{'k1_1': '{v1}', 'k2_2': '{v2}', 'k3_3': '{v3}', 'k3_4': '{v4}'}
当列表中只有一个映射和字典中的键时,上面的代码就像一个魅力。 我可以进行哪些修改以确保在密钥交换后保留值?
答案 0 :(得分:1)
正如其他人所指出的那样,你的字典试图存储多个具有相同值的键,这些键只会添加最终存储键的值。相反,您可以使用元组列表:
d = [('k1', '{v1}'), ('k2', '{v2}'), ('k3', '{v3}') , ('k3', '{v4}')]
list1 = ['k1_1', 'k2_2', 'k3_3', 'k3_4']
list1 = iter(list1)
new_d = [(next(list1), b) for _, b in d]
输出:
[('k1_1', '{v1}'), ('k2_2', '{v2}'), ('k3_3', '{v3}'), ('k3_4', '{v4}')]
答案 1 :(得分:0)
这不起作用,因为[Vue warn]: Do not use built-in or reserved HTML elements as component id: data
不是有效的dict()
。
根据文档:
最好将字典视为一组无序的键:值对,,要求键是唯一的(在一个字典中)。一对大括号创建一个空字典:
dict1
。在括号内放置以逗号分隔的键:值对列表,将初始键:值对添加到字典中;这也是字典在输出上的写法。
您如何期望Python知道您指的是哪个{}
?
答案 2 :(得分:0)
根据定义,词典不允许您存储重复键,因此您必须遵循不同的方法。一种是欺骗你的字典,使你的密钥不是strings
,而是一个类的实例,共享相同的名称。以下是您的示例案例的示例:
# Create a class that overrides the 'repr' method in order to print the actual key.
class Key:
def __init__(self, name):
self.name = name
def __repr__(self):
return self.name
# Create instances of the 'Key' class as keys.
dict1 = {Key('k1'): '{v1}', Key('k2'):'{v2}', Key('k3'):'{v3}' , Key('k3'):'{v4}'}
list1 = ['k1_1', 'k2_2', 'k3_3', 'k3_4']
print(dict1.keys())
dict1 = dict(zip(list1, dict1.values()))
print(dict1)
输出:
dict_keys([k1, k2, k3, k3])
{'k1_1': '{v1}', 'k2_2': '{v2}', 'k3_3': '{v3}', 'k3_4': '{v4}'}
致谢here获取最初的想法。