@gopnikvillageboys

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

重複を許可した辞書 パイソン

list1 = ["A","B","B","A","A"]
list2 = ["1","2","3,"4","5"]

dict_from_list = dict(zip(list1, list2))
print(dict_from_list)

結果:
{'A': '5', 'B': '3'}

となってしまうのですが、
本来は
{"A":"1","B":"2","B":"3","A":"4","A":"5"}
となるように重複を許可した辞書の結果が欲しいです

方法がわかる方ご教授お願いいたします。

0 likes

2Answer

標準ではありません。辞書キーに対して値をリストやタプルで持たせればいいかと思います。
dict_from_list['A'] はどんな値になることを期待しますか? 1個の場合、複数ある場合で。

2Like

上記の回答のように、辞書に同じキーが重複して存在する状況は標準ではないです。
しかし、ここではあえてひねくれた解答をしておきましょう。

def print_dict(user_dict: dict):
    """
    key とvalueを反転させた状態で出力を行う

    この関数はkeyがintで入っている状態でなければ利用不可
    """
    base_number = min(list(user_dict.keys()))

    print("{", end="")
    for i in user_dict:
        context = '"' + user_dict[i] + '":"' + str(i) + '"'
        print(context, end="")
        if i != len(user_dict) - 1 + base_number:
            print(',', end="")
    print("}", end="")


list1 = ["A", "B", "B", "A", "A"]
new_dict = {}  # 今回作成したい辞書

for i in range(len(list1)):
    new_dict[i + 1] = list1[i]

print_dict(new_dict)

出力結果
{"A":"1","B":"2","B":"3","A":"4","A":"5"}

ちなみに今回作成した辞書型をprintで出力すると

{1: 'A', 2: 'B', 3: 'B', 4: 'A', 5: 'A'}

今回の場合、数字のほうが一意になるので、数字側をキーとしています。

1Like

Your answer might help someone💌