2016-05-03 17 views
0
def makeNewDictFromOld(oldDict): 
    newDict = {} 
    for key,value in oldDict.items(): 
     if value compared to something else is true: 
      newDict[key].append(value) 
    return newDict 

これを行うと、KeyError: last key of old dictというエラーが表示されます。新しい辞書を作成して古いものから入力する

これを行う別の方法はありますか?

+0

の辞書には「最後の」キーはありませんこれを行います。辞書は順序付けられていません。最初の**キーの 'KeyError'を['任意の辞書順'で取得します(https://stackoverflow.com/questions/15479928/why-is-the-order-in-python-dictionaries-任意セット)。 –

+0

与えられた 'oldDict'に対して、' newDict'がどんなものになるのかははっきりしません。あなたは値がリストであると期待していますか?キーごとに値はどのように収集されますか?とにかくすべての 'キー'がユニークであるときにリストを最初に使うのはなぜですか? –

答えて

2

まだ存在しないキーにアクセスしようとしています。 newDict空のです。

newDictにリストとして値を設定する場合は、最初にキーを空のリストに設定する必要があります。 dict.setdefault()とそう:キーが既に辞書に存在しない限り

for key,value in oldDict.items(): 
    if value compared to something else is true: 
     newDict.setdefault(key, []).append(value) 

これは、key[]に最初に設定されます。

しかし、古い辞書内のすべてのキーは、あなたにもちょうど使用することができ、ユニークなので:あなたは完全に混乱していたし、ちょうど作成し、直接値を設定し、ないと思った場合を除き

for key,value in oldDict.items(): 
    if value compared to something else is true: 
     newDict[key] = [value] 

、ありますリスト:

for key,value in oldDict.items(): 
    if value compared to something else is true: 
     newDict[key] = value 

なく、少なくとも最後に、あなたはdictionary comprehensionに全く新しい辞書を作成することができます。

def makeNewDictFromOld(oldDict): 
    return {key: value for key, value in oldDict.items() 
      if value compared to something else is true} 
+0

私はあなたが何を意味するか完全には分かりません。 キーと値の両方が辞書内の「行」ごとに異なります。それは、その日付に対応する値を持つキーとしての日付です。 forループで 'newDict.setdefault(key、[])。append(value)'を使用すると、辞書の残りの部分にも同じ値が設定されます= – Gurkmeja101

+0

@ Gurkmeja101: 'newDict [ key] .append(value) '式であるので、ループ内にあります。 –

+0

助けてくれてありがとう。そして、私が助けが必要なものを推測しなければならなかったのは残念です。辞書がどのように機能するかを間違えました。 – Gurkmeja101

1

だけではなく、アペンド

def makeNewDictFromOld(oldDict): 
    newDict = {} 
    for key,value in oldDict.items(): 
     if True: 
      newDict[key] = value #assign directly instead of append 
    return newDict 

dict_ = {"name":"name1","age":35} 
print makeNewDictFromOld(dict_) 
+0

ありがとうございました。それはうまくいきました:) – Gurkmeja101

+0

@ Gurkmeja101:なぜ、あなたは最初に.append()を使っていましたか?これはリストと混同されましたか?あなたが私たちに期待される成果を与えたなら、それは最初からもっと明確になり、ここで推測する必要はなかったでしょう。 –

+0

@MartijnPietersはい、私は何を使うべきかについて完全に確信していました。以前は辞書を使いませんでしたので、ご迷惑をおかけして申し訳ありません。しかし、すべての助けを感謝! – Gurkmeja101

関連する問題