更改字典键

时间:2019-09-03 13:55:17

标签: python python-3.x dictionary

所以我有下面的字典

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"]

4 个答案:

答案 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中的每个数字提供可用的值,但是无论哪种方式,无论您如何命名密钥,您都只能为每个条目访问一个数字