1

このタプルのリストから:

[('IND', 'MIA', '05/30'), ('ND', '07/30'), ('UNA', 'ONA', '100'), \
('LAA', 'SUN', '05/30'), ('AA', 'SN', '07/29'), ('UAA', 'AAN')] 

辞書を作成したいと思います。どのキーが3 つおきのタプルの値に[0]なります。したがって、作成されたdictの最初のキーは、2番目のキーでなければなりません[1]'IND, MIA''LAA, SUN'

最終結果は次のようになります。

{'IND, MIA': [('IND', 'MIA', '05/30'), ('ND', '07/30'), ('UNA', 'ONA', '100')],\
'LAA, SUN': [('LAA', 'SUN', '05/30'), ('AA', 'SN', '07/29'), ('UAA', 'AAN')]}

これが何らかの関連性がある場合、問題の値がキーになると、それらはタプルから削除される可能性があります。どんな提案でも大歓迎です!

4

3 に答える 3

4
inp = [('IND', 'MIA', '05/30'), ('ND', '07/30'), ('UNA', 'ONA', '100'), \
       ('LAA', 'SUN', '05/30'), ('AA', 'SN', '07/29'), ('UAA', 'AAN')]

result = {}
for i in range(0, len(inp), 3):
    item = inp[i]
    result[item[0]+","+item[1]] = inp[i:i+3]

print (result)

Dict 理解ソリューションは可能ですが、やや面倒です。

result[item[0]+ ...配列からキーを削除するには、2 番目のループ行 ( ) を次のように置き換えます。

result[item[0]+","+item[1]] = [item[2:]]+inp[i+1:i+3]

Dict理解ソリューション(最初に考えていたよりも少し面倒です:))

rslt = {
    inp[i][0]+", "+inp[i][1]: inp[i:i+3]
    for i in range(0, len(inp), 3)
}

そして、答えにさらにコーシャなものを追加するために、ここにいくつかの便利なリンクがあります:): defaultdictdict 内包表記

于 2013-05-31T20:18:11.697 に答える
2

itertools grouperレシピの使用:

from itertools import izip_longest

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

{', '.join(g[0][:2]): g for g in grouper(inputlist, 3)}

するべきです。

このgrouper()メソッドは、一度に 3 つのタプルのグループを提供します。

ディクショナリ値からもキー値を削除します。

{', '.join(g[0][:2]): (g[0][2:],) + g[1:]  for g in grouper(inputlist, 3)}

入力のデモ:

>>> from pprint import pprint
>>> pprint({', '.join(g[0][:2]): g for g in grouper(inputlist, 3)})
{'IND, MIA': (('IND', 'MIA', '05/30'), ('ND', '07/30'), ('UNA', 'ONA', '100')),
 'LAA, SUN': (('LAA', 'SUN', '05/30'), ('AA', 'SN', '07/29'), ('UAA', 'AAN'))}
>>> pprint({', '.join(g[0][:2]): (g[0][2:],) + g[1:]  for g in grouper(inputlist, 3)})
{'IND, MIA': (('05/30',), ('ND', '07/30'), ('UNA', 'ONA', '100')),
 'LAA, SUN': (('05/30',), ('AA', 'SN', '07/29'), ('UAA', 'AAN'))}
于 2013-05-31T20:17:16.733 に答える
1
from collections import defaultdict
def solve(lis, skip = 0):
    dic = defaultdict(list)
    it = iter(lis)                    # create an iterator
    for elem in it:
        key = ", ".join(elem[:2])     # create key
        dic[key].append(elem)
        for elem in xrange(skip):     # append the next two items to the 
            dic[key].append(next(it)) # dic as skip =2 
    print dic


solve([('IND', 'MIA', '05/30'), ('ND', '07/30'), ('UNA', 'ONA', '100'), \
('LAA', 'SUN', '05/30'), ('AA', 'SN', '07/29'), ('UAA', 'AAN')], skip = 2)

出力:

defaultdict(<type 'list'>,
 {'LAA, SUN': [('LAA', 'SUN', '05/30'), ('AA', 'SN', '07/29'), ('UAA', 'AAN')],
 'IND, MIA': [('IND', 'MIA', '05/30'), ('ND', '07/30'), ('UNA', 'ONA', '100')]
 })
于 2013-05-31T20:45:01.510 に答える