2012-10-22 73 views
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) 這回我真如果第二假兩個數組匹配的元素。但我不知道如何構建第三個數組。

回答

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)) 
0

如果一本字典可以做,那麼這個用例就有一個特殊用途的Counter字典。

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

請注意,參數與您請求的參數相反,但很容易解決。

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']] 
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

您可以使用臨時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] 
0

將數據與鍵匹配的標準方法是字典。您可以使用詞典理解將firstArray轉換爲字典。

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

然後,您可以使用list comprehension遍歷第二個數組。

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