比较导致第三阵列的两个阵列

时间:2012-10-22 18:12:38

标签: python

我有两个阵列:

firstArray=[['AF','AFGHANISTAN'],['AL','ALBANIA'],['DZ','ALGERIA'],['AS','AMERICAN SAMOA']]
secondArray=[[1,'AFGHANISTAN'],[3,'AMERICAN SAMOA']]

所以我只需要一个类似

的数组
thirdArray=[[1,'AF'],[3,'AS']]

我试过any(e[1] == firstArray[i][1] for e in secondArray) 如果两个数组的第二个元素匹配,它返回True和false。但我不知道如何构建第三个数组。

6 个答案:

答案 0 :(得分:6)

首先,将firstArray转换为dict,将国家/地区作为键,将缩写作为值,然后使用列表推导查找secondArray中每个国家/地区的缩写:

abbrevDict = {country: abbrev for abbrev, country in firstArray}
thirdArray = [[key, abbrevDict[country]] for key, country in secondArray]

如果您使用的是没有字典理解(2.6及以下版本)的Python版本,则可以使用以下内容创建abbrevDict

abbrevDict = dict((country, abbrev) for abbrev, country in firstArray)

或者更简洁但可读性更低:

abbrevDict = dict(map(reversed, firstArray))

答案 1 :(得分:2)

最好将它们存储到词典中:

firstDictionary = {key:value for value, key in firstArray}
# in older versions of Python:
# firstDictionary = dict((key, value) for value, key in firstArray)

然后你可以通过字典查找得到第三个数组:

thirdArray = [[value, firstDictionary[key]] for value, key in secondArray]

答案 2 :(得分:2)

您可以使用临时dict作为查找:

firstArray=[['AF','AFGHANISTAN'],['AL','ALBANIA'],['DZ','ALGERIA'],['AS','AMERICAN SAMOA']]
secondArray=[[1,'AFGHANISTAN'],[3,'AMERICAN SAMOA']]

lookup = {snd:fst for fst, snd in firstArray}
thirdArray = [[n, lookup[name]] for n, name in secondArray]

答案 3 :(得分:0)

如果字典会这样做,那么就有一个特殊用途的Counter字典就是这个用例。

>>> from collections import Counter
>>> Counter(firstArray + secondArray)
Counter({['AF','AFGHANISTAN']: 1 ... })

请注意,参数与您请求的内容相反,但这很容易解决。

答案 4 :(得分:0)

使用列表理解:

In [119]: fa=[['AF','AFGHANISTAN'],['AL','ALBANIA'],['DZ','ALGERIA'],['AS','AMERICAN SAMOA']]

In [120]: sa=[[1,'AFGHANISTAN'],[3,'AMERICAN SAMOA']]

In [121]: [[y[0],x[0]] for x in fa for y in sa if y[1]==x[1]]

Out[121]: [[1, 'AF'], [3, 'AS']]

答案 5 :(得分:0)

将数据与键匹配的标准方法是字典。您可以使用dict comprehension将firstArray转换为字典。

firstDict = {x: y for (y, x) in firstArray}

然后,您可以使用列表推导来迭代第二个数组。

[[i[0], firstDict[i[1]]] for i in secondArray]