Python - 从其他两个词典的键创建一个字典

时间:2017-07-20 19:35:37

标签: python dictionary

我有一些函数可以创建两个单独的,排序的词典。 例子:

Dictionary_A

('a', 0.55)
(' ', 0.088)
('o', 0.088)
('>', 0.055)
('4', 0.055)

Dictionary_B

('c', 0.021)
('h', 0.031)
('u', 0.031)
('8', 0.024)
('y', 0.054)

为了进行一些加密测试,我需要创建第三个字典,其中Dictionary_A中的第一个键映射到Dictionary_B中的第一个键,依此类推。唯一需要注意的是,Dictionary_A中的字符可能会映射到Dictionary_B中的多个字符,但Dictionary_A中的两个不同字符可能无法映射到Dictionary_B中的相同字符。

Dictionary_C,从这些例子中可以看出:

{'a':'c', ' ':'h', 'o':'u', '>':'8', '4':'y'}

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

现在您的数据看起来像元组列表,而不是字典。在有效的python语法中,这将是:

class Person(Animal):
    def __init__(self, name):
        super().__init__(name, True)

然后可以创建一个字典,其中list_a = [('a', 0.55), (' ', 0.088), ('o', 0.088), ('>', 0.055), ('4', 0.055)] list_b = [('c', 0.021), ('h', 0.031), ('u', 0.031), ('8', 0.024), ('y', 0.054)] 的第一个元素映射到list_a的第一个元素,如下所示:

list_b

返回:

{k[0]:v[0] for k,v in zip(list_a, list_b)}

答案 1 :(得分:0)

假设键具有您喜欢的自然顺序,您可以执行类似

的操作
dict(zip(sorted(dict_a.keys()), sorted(dict_b.keys()))))

或者如果您假设OrderedDict,您可以在不使用sorted

的情况下执行相同的操作

你的约束对我来说没有多大意义,因为键不能在dict中重复。

答案 2 :(得分:0)

此答案适合于注释" Dictionary_A中的字符可能映射到Dictionary_B中的多个字符,但Dictionary_A中的两个不同字符可能无法映射到Dictionary_B中的相同字符。"在其他答案中忽略了这一点,因为字典中有两个相同的键是没有意义的。

听起来您可以访问或轻松获取两个键序列。如果是这样,那么您可以使用zipdefaultdict来构建从A中的键到B中键列表的映射。

from collections import defaultdict

keys_a = ['a', 'b', 'c', 'a']
keys_b = ['1', '2', '3', '4']

key_mapping = defaultdict(list)

for key_a, key_b in zip(keys_a, keys_b):
    key_mapping[key_a].append(key_b)

# defaultdict(<type 'list'>, {'a': ['1', '4'], 'c': ['3'], 'b': ['2']})
相关问题