0

私は簡単な辞書を持っています:

{"keyy":{"key": "value", "cey": "value"}, "kaye":{"key": "value"}}

「コンテキストアウェア」タプルとしてエンコードしたいこと:

[("keyy","key","value"), ("keyy","cey","value"), ("kaye","key","value")]

ValueErrorでの私の試み:解凍するには値が多すぎます

if __name__=='__main__':
    mydict={"keyy":{"key": "value", "cey": "value"}, "kaye":{"key", "value"}}
    mytuplelist=[tuple(k,v,val) for (k,v) in [(key,val) for (key,val) in mydict]]
    print mytuplelist

このタプルのリストを作成するにはどうすればよいですか?

4

6 に答える 6

3

リスト内包表記の使用:

mydict={"keyy":{"key": "value", "cey": "value"}, "kaye":{"key": "value"}}

mytuplelist=[(key,y,mydict[key][y]) for key in mydict for y in mydict[key]]

print (mytuplelist)

出力:

[('keyy', 'cey', 'value'), ('keyy', 'key', 'value'), ('kaye', 'key', 'value')]

単純な For-In ループを使用する:

dic={"keyy":{"key": "value", "cey": "value"}, "kaye":{"key": "value"}}
lis=[]
for x in dic:
  for y in dic[x]:
      lis.append((x,y,dic[x][y]))
print(lis)

出力:

[('keyy', 'cey', 'value'), ('keyy', 'key', 'value'), ('kaye', 'key', 'value')]
于 2012-06-07T03:03:45.243 に答える
2

私はこれのためのジェネレータが好きです:

mydict = {"keyy":{"key": "value", "cey": "value"}, "kaye":{"key": "value"}}

def unnest(d):
   for outerkey in d.iterkeys():
       for innerkey, value in d[outerkey].iteritems():
           yield outerkey, innerkey, value

mytuplelist = list(unnest(mydict))

または、確かにリスト内包表記に入れることができます。

mytuplelist = [(outerkey, innerkey, value) for outerkey in mydict.iterkeys() 
               for (innerkey, value) in mydict[outerkey].iteritems()]
于 2012-06-07T03:01:59.870 に答える
1

次の例では、指定したとおりにタプルのリストを作成します。

mydict = {"keyy":{"key": "value", "cey": "value"}, "kaye":{"key": "value"}}
tuplelist = []
for outer, dct in mydict.iteritems():
    tuplelist.extend((outer, key, val) for key, val in dct.iteritems())
于 2012-06-07T03:05:28.987 に答える
0

コードを修正するには:

mydict={"keyy":{"key": "value", "cey": "value"}, "kaye":{"key" : "value"}}
mytuplelist = [(outer, inner, val) for outer, d in mydict.iteritems() 
          for inner, val in d.iteritems()]
print mytuplelist

これを簡単な方法で行う方法については、kindallの回答を参照してください:)

于 2012-06-07T03:04:12.520 に答える
0

タイプミス (:最後のネストされた dict での欠落、「解凍するアイテムが多すぎる」の考えられる原因の 1 つ) を修正することで、リストの理解を取り戻すことができます。

dict1 = {"keyy":{"key": "value", "cey": "value"}, "kaye":{"key": "value"}}

print [(key1, key2, dict1[key1][key2]) for key1 in dict1 for key2 in dict1[key1]]
于 2012-06-07T03:11:31.080 に答える
0

リスト内包表記の使用

>>> D={"keyy":{"key": "value", "cey": "value"}, "kaye":{"key": "value"}}
>>> [(i,)+j for i in D for j in D[i].iteritems()]
[('keyy', 'cey', 'value'), ('keyy', 'key', 'value'), ('kaye', 'key', 'value')]
于 2012-06-07T03:11:36.013 に答える