根据索引组合字典

时间:2017-11-16 16:46:25

标签: python dictionary

让我们假设,我在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']}
谢谢。

3 个答案:

答案 0 :(得分:0)

您正在寻找zip,如下所示:

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

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

答案 1 :(得分:0)

您可以使用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内置函数的更多信息,请参阅此official document

答案 2 :(得分:0)

集合是无序的,这使得直接解决方案成为问题。但是,假设您为了消除原始列表中的重复项而创建了集合,您可以使用不同的重复删除方法,并结合使用压缩文件,正如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'}