Jak z 2 słownikow zrobić 1?

0
import random

categories = {1 : "Antics", 2 : "Tickets", 3: "Moviez",
              4 : "Music", 5 : "Photography", 6 : "Gamez", 7 : "Bookz",
              8 : "Jewelry", 9 : "Computers", 10 : "Clothes"}

items = {"Picture" : 1, "Clock" : 1, "Ticket for Mettalica concert" : 2,
         "Ticket for Iron Maiden concert" : 2, "Ticket for Placebo concert" : 2,
         "The pianist" : 3, "Batman" : 3, "Spider-Man" : 3,
         "WoW" : 6, "Cabal" : 6, "Diablo 3" : 6, "Diablo 2" : 6,
         "Thinking in Java" : 7, "Thinking in C++" : 7, "Golden ring" : 8,
         "Asus" : 10, "HP" : 10, "Shoes" : 11}

for key, val in categories :
    for k, v in items :
        if key == v :
            print(val, k)

Ten kod pokazuje:

test.py, line 14, in <module>
for key, val in categories :
TypeError: 'int' object is not iterable

A ja chce osiagnac cos takiego:

dictThe3rd = {"Antics" : "Picture", "Antics" : "Clock", "Tickets" : "Ticket for Mettalica concert", "Ticket" : "Ticket for Iron Maiden concert", "Ticket" : "Ticket for Placebo concert", ...}

jak to zrobic?

0

Nijak, w słowniku nie mogą być dwa identyczne klucze i dwie różne wartości.

0

Bezpośrednia iteracja po słowniku zwraca jego klucze, do wydobycia par klucz-wartość służy metoda items.

QEOFWKBGFMNJ napisał(a):

A ja chce osiagnac cos takiego:

dictThe3rd = {"Antics" : "Picture", "Antics" : "Clock", "Tickets" : "Ticket for Mettalica concert", "Ticket" : "Ticket for Iron Maiden concert", "Ticket" : "Ticket for Placebo concert", ...}

Nie w ten sposób, słownik może mieć dany klucz tylko raz. Może coś takiego:

output = {}
 
for title, cat_id in items.items():
    try:
        output.setdefault(categories[cat_id], []).append(title)
    except KeyError:
        print("nie ma kategorii o id {}!".format(cat_id))

http://ideone.com/XCiOm - działający przykład z wypisanym wynikiem. Ew. można zrobić to z użyciem defaultdict:

output = collections.defaultdict(list)
#...
    output[categories[cat_id]].append(title)

O to chodziło?

0

@autor bo tak się nie iteruje po słowniku, w ten sposób iterujesz po kluczach! musisz mieć słownik.items()
@autor a co by ci miał ten słownik zwrócić dla

dictThe3rd["Antics"]

skoro miałbyś kilka wartości dla takiego klucza? Może jednak chciałbyć mieć tutaj mapę list?

1 użytkowników online, w tym zalogowanych: 0, gości: 1