1

最初のディクトは修正されました。このディクトは、短い名前のある国のリストのままになります。

firstDict={'ERITREA': 'ER', 'LAOS': 'LA', 'PORTUGAL': 'PT', "D'IVOIRE": 'CI', 'MONTENEGRO': 'ME', 'NEW CALEDONIA': 'NC', 'SVALBARD AND JAN MAYEN': 'SJ', 'BAHAMAS': 'BS', 'TOGO': 'TG', 'CROATIA': 'HR', 'LUXEMBOURG': 'LU', 'GHANA': 'GH'}

ただし、このタプルの結果には複数のDictが含まれています。これは、MySQLdbが結果を返す形式です。

result =({'count': 1L, 'country': 'Eritrea'}, {'count': 1L, 'country': 'Togo'}, {'count': 1L, 'country': 'Sierra Leone'}, {'count': 3L, 'country': 'Bahamas'}, {'count': 1L, 'country': 'Ghana'})

ここで、これら両方の結果をCOUNTRY名と比較し、Resultの「Country」がfirstDictに存在する場合は、value.elseput0を入力します。必要な結果は次のとおりです。

mainRes={'ER':1,'TG':1,'BS':3,'GH':0,'LU':0}
4

3 に答える 3

4
In [2]: firstDict={'ERITREA': 'ER', 'LAOS': 'LA', 'PORTUGAL': 'PT', "D'IVOIRE": 'CI', 'MONTENEGRO': 'ME', 'NEW CALEDONIA': 'NC', 'SVALBARD AND JAN MAYEN': 'SJ', 'BAHAMAS': 'BS', 'TOGO': 'TG', 'CROATIA': 'HR', 'LUXEMBOURG': 'LU', 'GHANA': 'GH'}

In [3]: result =({'count': 1L, 'country': 'Eritrea'}, {'count': 1L, 'country': 'Togo'}, {'count': 1L, 'country': 'Sierra Leone'}, {'count': 3L, 'country': 'Bahamas'}, {'count': 1L, 'country': 'Ghana'})

In [4]: resdict = {r['country'].upper():r['count'] for r in result}

In [5]: mainRes = {abbrev:resdict.get(country,0) for country, abbrev in firstDict.items()}

In [6]: mainRes
Out[6]: 
{'BS': 3L,
 'CI': 0,
 'ER': 1L,
 'GH': 1L,
 'HR': 0,
 'LA': 0,
 'LU': 0,
 'ME': 0,
 'NC': 0,
 'PT': 0,
 'SJ': 0,
 'TG': 1L}

dictの理解がないPython2.6以前では、次のことができます。

In [13]: resdict = dict((r['country'].upper(), r['count']) for r in result)

In [14]: mainRes = dict( (abbrev, resdict.get(country,0)) for country, abbrev in firstDict.items())
于 2012-10-23T03:34:01.310 に答える
0

あなたは次のようなことを試すことができます

mainRes = dict.fromkeys(firstDict.itervalues(), 0)

for row in result:
    countryCode = firstDict.get(row['country'].upper())
    if countryCode:
        mainRes[countryCode] = row['count']
于 2012-10-23T03:32:53.480 に答える
0

配列変換を行う必要はありません。for ループを次のように使用するだけです。

import string
desired_result = {}
for c in result:
  country = string.upper(c['country'])
  if  country in firstDict: 
    desired_result[firstDict[country]] = c['count']
print desired_result
于 2012-10-23T03:49:03.990 に答える