Py学习  »  Python

在python中替换字典的值

DPdl • 5 年前 • 1758 次点击  

d1 = {('a', 'b'): 300.0,
 ('b, 'c'): '0.1*K1',
 ('a', 'c'): 0.462,
 ('c', 'e'): '0.2*K2',
 ('b', 'a'): '0.1*K1',
 ('c','d'): 'K1*K3'}
K1, K2, K3 = 2.1, 3.4, 2

我想替换 '0.1*K1' '0.2*K2' 在d2中为0.2*K2,依此类推。中的值 d1 需要更换的是 d2 d2级 :

d2 = {'0.1*K1':0.1*K1, '0.1*K2':'0.1*K2', 'K2*K3':K2*K3}

最终的结果将是一本字典:

d1_new = {('a', 'b'): 300.0,
     ('b, 'c'): 0.21,
     ('a', 'c'): 0.462,
     ('c', 'e'): 0.68,
     ('b', 'a'): 0.21',
     ('c','d'): 6.8}
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53540
文章 [ 3 ]  |  最新文章 5 年前
Nick
Reply   •   1 楼
Nick    5 年前

你可以用字典来理解:

d1_new = { k : d2[v] if v in d2 else v for (k, v) in d1.items() }

d2 对此:

d2 = {'0.1*K1':0.1*K1, '0.2*K2':0.2*K2, 'K1*K3':K1*K3}

d2级 一定要和里面的相符 d1 ,则输出如您所愿:

{
    ('a', 'b'): 300.0,
    ('b', 'c'): 0.21000000000000002,
    ('a', 'c'): 0.462,
    ('c', 'e'): 0.68,
    ('b', 'a'): 0.21000000000000002,
    ('c', 'd'): 4.2
}
Jordan Brière
Reply   •   2 楼
Jordan Brière    5 年前

你可以用 eval

d2 = {key: eval(str(value)) for key, value in d1.items()}

{
    ('a', 'b'): 300.0,
    ('b', 'c'): 0.21000000000000002,
    ('a', 'c'): 0.462,
    ('c', 'e'): 0.68,
    ('b', 'a'): 0.21000000000000002,
    ('c', 'd'): 4.2
}
U10-Forward
Reply   •   3 楼
U10-Forward    5 年前

使用字典理解 get :

d1_new = {k: d2.get(v, v) for k, v in d.items()}

{('a', 'b'): 300.0, ('b', 'c'): 0.21000000000000002, ('a', 'c'): 0.462, ('c', 'e'): 0.68, ('b', 'a'): 0.21000000000000002, ('c', 'd'): 4.2}