所以我有下面的字典
dict = {'tma_prot_{}.grnh':[r'$T_n-P_h$'], 'tma_prot_{}.groh':[r'$T_o-P_h$'], 'tma_urea_{}.grcn':[r'$T_c-U_n$'],
'tma_urea_{}.gron':[r'$T_o-U_n$'], 'tma_wat_{}.grco':[r'$T_c-W_o$']}
因此,我希望将0改为tma_prot_0.grnh
而不是tma_prot_2.grnh
我说l1 = [0, 2, 11]
得到的值
所以我打电话给
dict["tma_prot_11.grnh"] or dict["tma_prot_2.grnh"]
我应该得到tma_prot_0.grnh
的值
[r'$T_n-P_h$']
我想要一本广义词典。
我的尝试
for i in l1:
for key in dict.keys():
dict["key".format(l1[i])] = dict["key"]
答案 0 :(得分:2)
没有直接的方法可以实现这一目标。其他答案尝试重命名密钥或添加新密钥。
我的解决方案似乎更复杂,但是非常简单。 它会创建一个自定义字典,该字典会修改它获取的密钥,而不是字典的密钥。
import re
from collections import UserDict
class MyDict(UserDict):
digit_regex = re.compile(r'(\d+)')
def __getitem__(self, item):
new_key = self.digit_regex.sub('0', item)
return super().__getitem__(new_key)
d = MyDict({'tma_prot_0.grnh': [r'$T_n-P_h$'], 'tma_prot_0.groh': [r'$T_o-P_h$'],
'tma_urea_0.grcn': [r'$T_c-U_n$'], 'tma_urea_0.gron': [r'$T_o-U_n$'],
'tma_wat_0.grco': [r'$T_c-W_o$']})
for i in [0, 2, 11]:
print(d['tma_prot_{}.grnh'.format(i)])
输出
['$T_n-P_h$']
['$T_n-P_h$']
['$T_n-P_h$']
答案 1 :(得分:1)
您快到了:
for i in l1:
for key in list(dict.keys()):
dict[key.format(i)] = dict[key]
答案 2 :(得分:1)
只需使用新的字典来存储实例内容:
template_dict = {'tma_prot_{}.grnh':[r'$T_n-P_h$'], 'tma_prot_{}.groh':[r'$T_o-P_h$'], 'tma_urea_{}.grcn':[r'$T_c-U_n$'],
'tma_urea_{}.gron':[r'$T_o-U_n$'], 'tma_wat_{}.grco':[r'$T_c-W_o$']}
dict = {}
l1 = [0, 2, 11]
for i in l1:
for key in template_dict:
dict[key.format(i)] = template_dict[key]
然后,您可以使用dict
来满足您的要求。
答案 3 :(得分:0)
您是否尝试过为您需要的每个数字在字典中添加键,值对? 例如:
value = dict["tma_prot_0.grnh"]
for number in l1:
new_key = "tma_prot_{}.grnh".format(str(number))
dict[new_key] = value
当我正确时,您希望为l1中的每个数字提供可用的值,但是无论哪种方式,无论您如何命名密钥,您都只能为每个条目访问一个数字