Python-从另外两个字典的键创建一个字典

Python-从另外两个字典的键创建一个字典,python,dictionary,Python,Dictionary,我有一些函数可以创建两个独立的、排序的字典。 示例: 字典 ('a', 0.55) (' ', 0.088) ('o', 0.088) ('>', 0.055) ('4', 0.055) 字典 ('c', 0.021) ('h', 0.031) ('u', 0.031) ('8', 0.024) ('y', 0.054) 为了进行一些加密测试,我需要创建第三个字典,其中dictionary_a中的第一个密钥映射到dictionary_B中的第一个密钥,以此类推。唯一需要注意的是,Dic

我有一些函数可以创建两个独立的、排序的字典。 示例:

字典

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

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

非常感谢您的帮助

假设键具有您喜欢的自然顺序,您可以执行以下操作

dict(zip(sorted(dict_a.keys()), sorted(dict_b.keys()))))
或者,如果您假设OrderedDict,您可以不使用sorted来做同样的事情


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

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

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)]
然后,可以这样创建一个字典,其中包含从列表a映射到列表b第一个元素的第一个元素:

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

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

这个答案迎合了这样一个评论,即字典a中的一个字符可能映射到字典B中的多个字符,但字典a中的两个不同字符可能不会映射到字典B中的同一个字符。在其他答案中,这一点被忽略,因为字典中有两个相同的键是没有意义的

听起来你有权限或者可以很容易地获得两个密钥序列。如果是这样,那么您可以使用zip和defaultdict构造从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']})

字典无法排序,而且这些不是字典…看起来B中的键应该映射到A中的键,而不是相反…接下来是juanpa。arrivillaga的评论,您是否为Dictionary_A和Dictionary_B使用自定义类?如果映射违反了您概述的规则,您希望采取什么行为?另外,您能否举例说明您的警告是什么意思,以及结果会是什么样子?请解释否决票。我感谢您的帮助。