0
def big(dict, n):
    line = []

    for k in dict:
       if k > n:
            line.append(k)
            return line

n より大きい dict 内のすべての要素を見つける必要があります。

ただし、私のコードは、n より大きい dict の最大数のみを返します。

それを正しくするために何をする必要がありますか?

4

4 に答える 4

6

return lineタブが多すぎるため、戻る前にすべてのキーを調べるのではなく、より大きい最初の キーnが見つかったときに戻ります(注: 辞書は、書き方によって順序付けられるわけではありません) 。試す:

def big(dic, n):
    line = []
    for k in dic:
        if k > n:
            line.append(k)
    return line

実際、リスト内包表記を使用することを好むかもしれません (そして、関数は 1 行になります)。

def big(dic, n):
    return [k for k in dic if k>n]

.

辞書はキー{key: value}と値のペアで構成され、辞書を反復処理するときは、そのキーを反復処理しています。これは、変数を使用してキーkを反復処理する方法を説明しています。あれは、

[k for k in dic] = [key1, key2, ...]

したがって、辞書で最大の値を見つけたい場合は、次を使用できます。

    return [dic[k] for k in dic if dic[k]>n]

注:変数名をdic(@AndrewJaffeが言及しているように)dict組み込みオブジェクトであるため、変数名を変更しました。ここで名前を変更すると、予期しないことが発生する可能性があり、一般的に悪い習慣と見なされます。たとえば、確認したい場合type(dic)==dict

于 2012-08-24T10:55:49.747 に答える
1
def big(dic, n):
    line = []
    for k in dic:
       if  dic[k]> n:      #compare value instead of key      
            line.append(k) #use k if you're appending key else dic[k] for val
            return line

出力:

>>> print big({'a':10,'b':15, 'c':12},11)
['c']
于 2012-08-24T11:24:52.167 に答える
1

単純に辞書を繰り返し処理すると、一連のキーが得られます。ではありません。

したがって、必要なことを行うには、 itervaluesが必要です。

for k in d.itervalues():    ### call it "d" rather than "dict"
   if k>n:
      line.append(k)

または、他の人が指摘したように、リスト内包表記を使用します。

dictまた、ビルトインを隠しているため、名前に使用しないでください。

于 2012-08-24T11:24:59.773 に答える
0

return ステートメントを 2 タブ後方に移動します。そうしないと、n より大きい最初の値で戻ります。

于 2012-08-24T10:55:34.110 に答える