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']}

我的方法是部分的,因为我很难弄清楚如何告诉 D3D1 获取键和从 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。