1

私は辞書を持っており、キーを反復処理し、キーをテストしてから、テストに合格したキーを出力したいと考えています。

たとえば、現時点で私のコードは次のようになります。

x = {4:"a", 1:"b", 0:"c", 9:"d"}
for t in x:
    if t > 2:
        print t

ただし、すべての出力は、単なるキーです。

キーの代わりにコードの最後に値を出力するコードを取得するにはどうすればよいですか?

また、これを辞書の形で取得するにはどうすればよい{key : value}ですか?

4

9 に答える 9

5

これを試すことができます:print t, x[t]

またはこれ:

for key, val in x.items():
    if key > 2:
        print key, val

印刷しているペアのみを新しい辞書に取得する場合は、そこに配置する必要があります。

newdict = {}
for key, val in x.items():
    if key > 2:
        print key, val
        # put all the keys > 2 into the new dict
        newdict[key] = val

もちろん、その解決策は挿入時に印刷されます。単なる小さなスクリプト以上のものを実行している場合は、機能を分割することでより多くのユーティリティが得られ、特定の関数が 1 つだけのことを行うようにします。

def filter_dict(x):
    newdict = {}
    for key, val in x.items():
        if key > 2:
            # put all the keys > 2 into the new dict
            newdict[key] = val

def pretty_print(dct):
    for k, v in dct.items():
        print k, v

filtered = filter_dict(x)

pretty_print(dct)

もちろん、これは単にデバッグしている場合には当てはまりません。また、作成しているプログラムの大きさに依存する方法もあります。十分に単純なことをしている場合は、余分な柔軟性が得られます。与えられたものが何をするのかを正確に把握するための余分な努力のために、機能を分割することは失われます. つまり、一般的にはそうすべきです。

さらに、Python で単純な比較でリストをフィルタリングする最も慣用的な方法は、dict 内包表記を使用することです (Python 2.7/3.0 の新機能):

filtered = {key: val for key, val in x if key > 2}
于 2012-05-04T04:04:49.403 に答える
2
print [(k,v) for k,v in yourDict.items() if test(k)]

k for k,v in...またはを実行できます。v for k,v in...値のみが必要な場合は、を使用できますyourDict.values()。)

于 2012-05-04T04:17:18.593 に答える
1

アイテムのサブセットを使用して辞書を作成する場合は、Python2.7以降の辞書内包表記を使用することもできます。

>>> x = {4:"a", 1:"b", 0:"c", 9:"d"}
>>> y = {k:v for k, v in x.iteritems() if k > 2}
>>> y
{9: 'd', 4: 'a'}

これは、 Johnyswebが彼の回答で示しているものとわずかな構文の違いがある、新しい同等のものにすぎません。

>>> y = dict((k, v) for k, v in x.iteritems() if k > 2)
>>> y
{9: 'd', 4: 'a'}    
于 2012-05-04T07:19:22.520 に答える
1

次のリスト内包表記は、キー> 2の場合、キーと値を出力します。

これを試して:

print [(key, value) for key, value in x.iteritems() if key > 2]
于 2012-05-04T04:22:45.943 に答える
1

キーだけ:

>>> [k for k in x.iterkeys() if k > 2]
[4, 9]

値だけ:

>>> [v for k,v in x.iteritems() if k > 2]
['a', 'd']

キーと値のペア:

>>> [(k, v) for k,v in x.iteritems() if k > 2]
[(4, 'a'), (9, 'd')]

としてdict

>>> dict((k,v) for k,v in x.iteritems() if k > 2)
{9: 'd', 4: 'a'}
于 2012-05-04T04:26:58.280 に答える
1

キーと値:

x = {4:"a", 1:"b", 0:"c", 9:"d"}
for k,v in x.items():
    if k>2: print"{%d : %s}"%(k,repr(v))

{4 : 'a'}
{9 : 'd'}

ちょうど値:

x = {4:"a", 1:"b", 0:"c", 9:"d"}
for k,v in x.items():
    if k>2:print v

a
d
于 2012-05-04T04:32:39.740 に答える
1
x = {4:"a", 1:"b", 0:"c", 9:"d"}
for t in x:
    if t > 2:
        print '{}: {}'.format(t, x[t])

もう少しpythonic:

>>> for key, value in x.iteritems():
...   if key > 2:
...     print '{}: {}'.format(key, value)
... 
4: a
9: d

編集:値を印刷するには:

>>> for key, value in x.iteritems():
...   if key > 2:
...     print value
... 
a
d
于 2012-05-04T04:04:28.060 に答える
0

ラムダ関数の使用

(lambda x:[(k,v) for k,v in x.iteritems() if k > 2])(x)

于 2013-01-25T09:08:41.823 に答える
0

このソリューションtは、辞書のキーと値をkey に出力xしますt

x = {4:"a", 1:"b", 0:"c", 9:"d"}
for t in x:
    if t > 2:
        print t, x[t]
于 2012-05-04T04:05:54.153 に答える