Python 3.6: 使用另一个字典的值作为索引创建新的字典
Python 3.6: create new dict using values from another as indices
在 Python 3.6.3 中,我有以下字典 D1
:
D1 = {0: array([1, 2, 3], dtype=int64), 1: array([0,4], dtype=int64)}
数组中的每个值都是另一个字典的键的索引D2
:
D2 = {'Jack': 1, 'Mike': 2, 'Tim': 3, 'Paul': 4, 'Tommy': 5}
我正在尝试创建第三个字典,D3
,使用与 D1
相同的键,作为值 D2
的键对应于 [=20] 的索引=].
我想要的结果是:
D3 = {0: ['Mike','Tim','Paul'], 1: ['Jack','Tommy']}
我的方法是部分的,因为我很难弄清楚如何告诉 D3
从 D1
获取键和从 D2
获取值。我不太确定 and
。有什么想法吗?
D3 = {key:list(D1.values())[v] for key in D1.keys() and v in D2[v]}
这是未经测试的,但我相信这应该会让您朝着正确的方向前进。我发现有时将复杂的单行拆分成多行会很有帮助
D3={}
for d1k,d1v in D1.items():
D3[d1k] = []
for idx in d1v:
D3[d1k].append(D2[idx])
你可以像这样使用字典理解:
from numpy import array
D1 = {0: array([1, 2, 3]), 1: array([0,4])}
D2 = {'Jack': 1, 'Mike': 2, 'Tim': 3, 'Paul': 4, 'Tommy': 5}
temp = dict(zip(D2.values(), D2.keys())) # inverting key-value pairs
D3 = {k: [temp.get(i+1, 'N\A') for i in v] for k, v in D1.items()}
这导致:
{0: ['Mike', 'Tim', 'Paul'], 1: ['Jack', 'Tommy']}
如果您使用的是 Python 3.6+,您可以使用 enumerate
创建一个字典来按索引查找 D2
中的名称,然后将索引映射到 D1
到它:
r = dict(enumerate(D2))
D3 = {k: list(map(r.get, v)) for k, v in D1.items()}
D3 将变为:
{0: ['Mike', 'Tim', 'Paul'], 1: ['Jack', 'Tommy']}
可能不是最好的解决方案,但有效
D3={}
for key in D1.keys():
value_list=D1.get(key)
value_list= [(lambda x: x+1)(x) for x in value_list]
temp=[]
for d2_key,value in D2.items():
if value in value_list:
temp.append(d2_key)
D3[key]=temp
输出:
{0: ['Tim', 'Mike', 'Paul'], 1: ['Jack', 'Tommy']}
给你!
D1 = {0:[1, 2, 3], 1: [0,4]}
D2 = {'Jack': 1, 'Mike': 2, 'Tim': 3, 'Paul': 4, 'Tommy': 5}
D2_inverted = {v: k for k, v in D2.iteritems()}
D3={}
for key in D1:
temp = []
for value in D1[key]:
temp.append(D2_inv[value+1])
D3[key] = temp
print D3
迭代 D1 中的键;
创建一个临时列表来存储您希望分配给新字典的值,并用 D2 中的所需值填充它。 (为简单起见,颠倒了它的键和值);
分配给 D3。
在 Python 3.6.3 中,我有以下字典 D1
:
D1 = {0: array([1, 2, 3], dtype=int64), 1: array([0,4], dtype=int64)}
数组中的每个值都是另一个字典的键的索引D2
:
D2 = {'Jack': 1, 'Mike': 2, 'Tim': 3, 'Paul': 4, 'Tommy': 5}
我正在尝试创建第三个字典,D3
,使用与 D1
相同的键,作为值 D2
的键对应于 [=20] 的索引=].
我想要的结果是:
D3 = {0: ['Mike','Tim','Paul'], 1: ['Jack','Tommy']}
我的方法是部分的,因为我很难弄清楚如何告诉 D3
从 D1
获取键和从 D2
获取值。我不太确定 and
。有什么想法吗?
D3 = {key:list(D1.values())[v] for key in D1.keys() and v in D2[v]}
这是未经测试的,但我相信这应该会让您朝着正确的方向前进。我发现有时将复杂的单行拆分成多行会很有帮助
D3={}
for d1k,d1v in D1.items():
D3[d1k] = []
for idx in d1v:
D3[d1k].append(D2[idx])
你可以像这样使用字典理解:
from numpy import array
D1 = {0: array([1, 2, 3]), 1: array([0,4])}
D2 = {'Jack': 1, 'Mike': 2, 'Tim': 3, 'Paul': 4, 'Tommy': 5}
temp = dict(zip(D2.values(), D2.keys())) # inverting key-value pairs
D3 = {k: [temp.get(i+1, 'N\A') for i in v] for k, v in D1.items()}
这导致:
{0: ['Mike', 'Tim', 'Paul'], 1: ['Jack', 'Tommy']}
如果您使用的是 Python 3.6+,您可以使用 enumerate
创建一个字典来按索引查找 D2
中的名称,然后将索引映射到 D1
到它:
r = dict(enumerate(D2))
D3 = {k: list(map(r.get, v)) for k, v in D1.items()}
D3 将变为:
{0: ['Mike', 'Tim', 'Paul'], 1: ['Jack', 'Tommy']}
可能不是最好的解决方案,但有效
D3={}
for key in D1.keys():
value_list=D1.get(key)
value_list= [(lambda x: x+1)(x) for x in value_list]
temp=[]
for d2_key,value in D2.items():
if value in value_list:
temp.append(d2_key)
D3[key]=temp
输出:
{0: ['Tim', 'Mike', 'Paul'], 1: ['Jack', 'Tommy']}
给你!
D1 = {0:[1, 2, 3], 1: [0,4]}
D2 = {'Jack': 1, 'Mike': 2, 'Tim': 3, 'Paul': 4, 'Tommy': 5}
D2_inverted = {v: k for k, v in D2.iteritems()}
D3={}
for key in D1:
temp = []
for value in D1[key]:
temp.append(D2_inv[value+1])
D3[key] = temp
print D3
迭代 D1 中的键;
创建一个临时列表来存储您希望分配给新字典的值,并用 D2 中的所需值填充它。 (为简单起见,颠倒了它的键和值);
分配给 D3。