我有两个阵列:
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。但我不知道如何构建第三个数组。
答案 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]