1

私は2つの配列を持っています:

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) てみました両方の配列の2番目の要素が一致する場合、TrueとFalseが返されました。しかし、3番目の配列を構築する方法がわかりません。

4

6 に答える 6

6

まず、国をキー、略語を値としてdictに変換し、リスト内包表記を使用してfirstArray各国の略語を検索します。secondArray

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

dict内包表記のない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)

次に、辞書を検索するだけで3番目の配列を取得できます。

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

リスト内包表記を使用します。

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

データをキーに一致させる標準的な方法は辞書です。firstArraydict 内包表記を使用して辞書に変換できます。

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

その後、リスト内包表記を使用して 2 番目の配列を反復処理できます。

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

ディクショナリで十分な場合は、まさにこのユース ケースのための特別な目的の Counter ディクショナリがあります。

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

引数が要求したものとは逆になっていることに注意してください。ただし、これは簡単に修正できます。

于 2012-10-22T18:14:07.763 に答える