1

我有两个数组:

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) 它返回真假。但我不知道如何构建第三个数组。

4

6 回答 6

6

首先,转换为以国家为键,缩写为值的字典,然后使用列表firstArray推导查找每个国家的缩写:secondArray

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

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

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

或者更简洁但可读性较差:

abbrevDict = dict(map(reversed, firstArray))
于 2012-10-22T18:16:01.410 回答
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]
于 2012-10-22T18:16:47.947 回答
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]
于 2012-10-22T18:17:25.720 回答
0

如果字典可以,那么有一个专门用于此用例的 Counter 字典。

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

请注意,参数与您的要求相反,但这很容易纠正。

于 2012-10-22T18:14:07.763 回答
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']]
于 2012-10-22T18:15:42.050 回答
0

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

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

然后,您可以使用列表推导遍历您的第二个数组。

[[i[0], firstDict[i[1]]] for i in secondArray]
于 2012-10-22T18:18:27.200 回答