替换 python 中字典的值
Replacing values of a dictionary in python
我有一本看起来像这样的字典:
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
我想将d1中的'0.1*K1'
替换为0.1*K1,将d2中的'0.2*K2'
替换为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}
您可以使用 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
}
你可以使用字典理解:
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
}
使用字典理解 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}
我有一本看起来像这样的字典:
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
我想将d1中的'0.1*K1'
替换为0.1*K1,将d2中的'0.2*K2'
替换为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}
您可以使用 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
}
你可以使用字典理解:
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
}
使用字典理解 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}