0

私は数週間前に Python の学習を始めました (Python やプログラミングに関する予備知識はありません)。指定されたディクショナリに対して引数として 2 つのリストで構成されるタプルを返す定義を作成したいと考えています。基本的に、コードは次のようになります。

"""Iterate over the dictionary named letters, and populate the two lists so that 
keys contains all the keys of the dictionary, and values contains 
all the corresponding values of the dictionary. Return this as a tuple in the end."""

def run(dict):
    keys = []
    values = []
    for key in dict.keys():
        keys.append(key)
    for value in dict.values():
        values.append(value)
    return (keys, values)


print run({"a": 1, "b": 2, "c": 3, "d": 4})

このコードは完全に機能しました (ただし、これは私の解決策ではありません)。しかし、 .keys()および.values()メソッドを使用したくない場合はどうすればよいでしょうか? その場合、次のようなものを使用してみましたが、「unhashable type: 'list'」というエラー メッセージが表示されました。

def run(dict):
    keys = []
    values = []
    for key in dict:
        keys.append(key)
        values.append(dict[keys])
    return (keys, values)


print run({"a": 1, "b": 2, "c": 3, "d": 4})

問題に見えるのは?

4

3 に答える 3

4

関数を作成するもう 1 つの簡単な (バグの可能性が少ない) 方法

def run(my_dict):
    return zip(*my_dict.items())
于 2013-05-29T00:20:24.450 に答える
2

Martijn の答えは正しいですが、元のサンプルが必要以上の作業を行っていることにも注意してください。dict.keys() と dict.values() は両方ともリストを返し、それらを再作成する理由はありません。コードは次のようになります。

def run(my_dict):
    return my_dict.keys(), my_dict.values()

print run({"a": 1, "b": 2, "c": 3, "d": 4})
于 2013-05-29T00:12:37.327 に答える