0

辞書の設定:

rr = range(1,11)
ft =[('sd:jan:'+ str(x), 'News') for x in rr]    
fd = dict(ft)

 fd
    {'sd:jan:1': 'News',
     'sd:jan:10': 'News',
     'sd:jan:2': 'News',
     'sd:jan:3': 'News',
     'sd:jan:4': 'News',
     'sd:jan:5': 'News',
     'sd:jan:6': 'News',
     'sd:jan:7': 'News',
     'sd:jan:8': 'News',
     'sd:jan:9': 'News'}

fd.keys()

['sd:jan:10',
 'sd:jan:2',
 'sd:jan:3',
 'sd:jan:1',
 'sd:jan:6',
 'sd:jan:7',
 'sd:jan:4',
 'sd:jan:5',
 'sd:jan:8',
 'sd:jan:9']

キーに「jan」のすべての値を追加するにはどうすればよいですか?

編集:「jan」の部分キーの値(1 + 2 + 3 + 4 + 5 + 6 + ... + 10)を追加しています。

4

4 に答える 4

2

回避できる場合は、後で数値として何かをしたい場合に、最初から数値を文字列に変換しないでください。これはどう:

rr = range(1,11)
ft =[(('sd','jan',x), 'News') for x in rr]    
fd = dict(ft)

tot = sum(val
   for (key, subkey, val) in fd
   if subkey == 'jan')

>>>tot
55
于 2012-06-04T18:23:24.120 に答える
1

ジェネレータ式を使用するのはどうですか:

sum(int(i.split(':')[-1]) for i in fd.keys())

与える:

55

各エントリを:で分割し、最後のフィールドを取得し、intに変換して、それらを合計します。

番号を調べる必要がある場合、または後で何らかの理由で番号が必要になった場合は、リスト内包表記を使用してリストに簡単に収集できます。

[int(i.split(':')[-1]) for i in fd.keys()]
于 2012-06-04T18:28:34.090 に答える
0
for key in fd:
if 'jan' in key:
    total=total+int(key.split(':')[-1])
于 2012-06-04T18:24:26.930 に答える
0
len([i for i in fd if i[3:6] == 'jan'])

リスト内包表記を作成し、'jan' 部分文字列 ( [3:6]) でフィルター処理します。を使用して、結果のリストを数えlenます。

于 2012-06-04T18:22:58.927 に答える