我如何追加/合并/配对相同索引或键的值,而忽略没有匹配索引或键的值?

时间:2018-12-31 19:46:17

标签: python list indexing ordereddictionary

我试图将来自同一索引或键值对的两个列表中的列表值配对/合并。如果该值没有键,则不应该配对,如果它具有键,则应该配对。

我尝试使用它们的索引附加值,但是,它返回IndexError:列表索引超出范围。我已经使用它们的键将它们配对了,但是输出不是我想要的输出

list1 = [[0, 1], [1, 2], [3, 1]]
list2 = ["append", "values", "to", "one", "another"]

#my attempt at pairing the lists together 
merger = dict(zip(list1, list2))
print(merger)

#converted the first value of the values in list 1 to a key
getKey = {words[0]:words[1:] for words in list1}

#OrderedDict() method to append the two lists
newDict = OrderedDict()
for i, v in enumerate(list2): 
    newDict.setdefault(v, []).append(getKey[i])
print(newDict)

输出

>>> merger output: 
{'append': [0, 1], 'values': [1, 2], 'to':[3, 1]}

>>> expected merger output: 
{'append': [0, 1], 'values':[1, 2], 'one':[3, 1]}

>>> newDict output: 
    IndexError: list index out of range

>>> newDict expected output:
    OrderDict([('append', [[0,1]]), ('values', [[1,2]]), ('one', [[3,1]])]

我要在这里实现的目的是,当且仅当它与键匹配时,才将list1追加到list2上,否则它不应输出任何内容。

我不确定该如何解决。预先感谢

1 个答案:

答案 0 :(得分:0)

如果我正确理解,您可以这样做:

list1 = [[0, 1], [1, 2], [3, 1]]
list2 = ["append", "values", "to", "one", "another"]

# create lookup tables (index, values)
lookup1 = {k : [k, v] for k, v in list1}
lookup2 = {i : v for i, v in enumerate(list2)}

merge = {lookup2[k] : v  for k, v in lookup1.items()}

print(merge)

输出

{'append': [0, 1], 'one': [3, 1], 'values': [1, 2]}

请注意,此解决方案假定list1中的子列表的第一个值与索引相对应。