Python 根据索引合并词典

Python 根据索引合并词典,python,dictionary,Python,Dictionary,让我们假设,我在python中有一个键值对,如下所示 a = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'test1', 'test', '', '', '', '', '', '', '', '', '', ''] 现在,我想将这些值与以下内容结合起来: b = {"18", "17", "16", "15", "14", "13", "12", "11", "21", "

让我们假设,我在python中有一个键值对,如下所示

a = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'test1', 'test', '', '', '', '', '', '', '', '', '', '']
现在,我想将这些值与以下内容结合起来:

b = {"18", "17", "16", "15", "14", "13", "12", "11", "21", "22", "23", "24", "25", "26", "27", "28","48", "47", "46", "45", "44", "43", "42", "41", "31", "32", "33", "34", "35", "36", "37", "38"}
是否有任何方法可以将变量
a
的值与\
b
的值进行组合,如下图所示:

c = {'44': ['test1'], '43': ['test2']}

谢谢。

您正在寻找
zip
,类似以下内容:

>>> dict(zip(b, filter(None, a)))
{'43': 'test1', '17': 'test'}

请记住,这将在运行时产生不同的结果,因为集合是无序的。

您可以使用
zip
解决您的问题:

a = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'test1', 'test', '', '', '', '',
     '', '', '', '', '', '']
b = ["18", "17", "16", "15", "14", "13", "12", "11", "21", "22", "23", "24", "25", "26", "27", "28", "48", "47", "46",
     "45", "44", "43", "42", "41", "31", "32", "33", "34", "35", "36", "37", "38"]

print dict((x, y) for x, y in zip(b, a) if y != '')
您将获得以下输出:

{'44': 'test1', '43': 'test'}

如果您想了解更多关于此类python内置函数的信息,可以参考此内容。

集合是无序的,这使得直接解决方案有问题。但是,假设您创建集合是为了消除最初列表中的重复项,那么您可以使用不同的重复项删除方法,并按照Francisco的回答建议使用压缩,但不使用与项目不匹配的过滤器:

a = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'test1', 'test', '', '', '', '', '', '', '', '', '', '']
b_list = ["18", "17", "16", "15", "14", "13", "12", "11", "21", "22", "23", "24", "25", "26", "27", "28","48", "47", "46", "45", "44", "43", "42", "41", "31", "32", "33", "34", "35", "36", "37", "38", "18", "17"]  
# added hypothetical duplicates to b for the sake of showing how they're removed below
b = sorted(set(b_list), key=lambda x: b_list.index(x))

c = dict(zip(a, b))
del c['']  # removes the erroneous '' key
输出您想要的内容:

{'44': 'test1', '43': 'test'}

不清楚你想在这里实现什么
b
是一个集合,因此实际上无法将
b
中的值与
a
中的值进行匹配。它不需要排序。我只需要得到
b
的值,其中出现了
a
的索引值。在我的示例中,包含值的
a
的索引是20和21,因此我只需要从
b
中获取值44和43。在我的示例中,排序是假设一个不同的起点,并且有重复项。它只允许设置一个替代方案来删除这些重复项,而不是按顺序对列表进行实际排序。如果您使用上面的a和b,那么我的示例的输出是{'44':'test1','43':'test'}。我更新了上面的代码,以便您可以运行它并进行测试。