2017-10-12 16 views
0

dictから特定の値を削除して返そうとしています。 たとえば、dictに長さが6未満の文字列の値が含まれている場合、dictから削除されます。どのようにしてディクテーションを繰り返し、編集した状態で返すことができますか?Python - 辞書から特定の値を削除してから返す

+1

値の長さが6未満の場合は、全体のキー値を削除する必要がありますか? –

+0

このようなタスクでは、アイテムを削除しないで、オリジナルを上書きする新しいdictを作成します。 – abccd

+0

こんにちは、どういう意味かというと、キーではなく値だけを削除する方法です。キーに複数の値があるとしますが、そのうちの1つを削除したいだけですか? – verdy

答えて

0

あなただけの6未満の長さを持っている値を削除している場合さて、あなたが必要なのはこれです:

d = {'a': 'asdfasdf', 'b': 'asdf'} 

while True: 
    flag = True 
    for i in d: 
     if len(d[i]) < 6: 
      del d[i] 
      flag = False 
      break 
    if flag: 
     break 

print d 

{'a': 'asdfasdf'} 
+1

これははるかに簡単かもしれません。 '(k)vはkのためにvを、d.items()ならばlen(v)<6}' == '{'b': 'asdf'}' –

0

辞書で作業する場合、items()を使用するのは良いです:

することができますd = {1: "myname", 2:"mynamex", 3:"mynamey",4:"name"}

for key, value in d.items(): 
    if len(value) < 6: 
     del d[key] 
print(d) 

答を考えてみます。文字列の6未満の文字が削除され

{1: 'myname', 2: 'mynamex', 3: 'mynamey'} 

注:

のPython 2:

for key, value in d.iteritems(): 

のPython 3:あなたはfor key in sを使用する場合

for key, value in d.items() 
0

我々は、

def doAct(s): 
    for key in s.keys(): 
     if len(s[key]) < 6: 
     del s[key] 
    return s 

を単一のループを使用してそれを行うことができます、y ouはエラーRuntimeError: dictionary changed size during iterationになります。

+0

ありがとうPaul、更新済:) – Kajal

0

これは、いわゆるdictの理解を持つ単一の行で実行終了することができます:

{k:v for k,v in d.items() if len(v)<6} 

内部的には、サイクルにアンラップされますが、それはタイプミスをするために簡単かつ少ないスペースです。 ループの中でdiff条件を使うことも、inのためにmakeすることもできます。

関連する問題