random.choice auf dictionary

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
milchtrinker
User
Beiträge: 6
Registriert: Sonntag 18. Juli 2010, 17:30

Hallo,

ich versuche verzweifelt einen zufälligen wert aus einem dictionary zu bekommen. Google bat zwar einige Lösungsvorschläge, die funktionieren
aber alle nicht. Ist es überhaupt möglich ?


Gruß Milch..
Benutzeravatar
pillmuncher
User
Beiträge: 1531
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Python 2.x:

Code: Alles auswählen

a = random.choice(some_dict.items())
b = random.choice(some_dict.keys())
c = random.choice(some_dict.values())
Python 3.x:

Code: Alles auswählen

a = random.choice(list(some_dict.items()))
b = random.choice(list(some_dict.keys()))
c = random.choice(list(some_dict.values()))
Such dir eines aus.
In specifications, Murphy's Law supersedes Ohm's.
BlackJack

@milchtrinker: Direkt ist das nicht möglich, Du kannst Dir aber vom Dictionary eine Liste mit den Schlüssel oder mit dem "Items" geben lassen und daraus einen zufälligen Wert auswählen.
milchtrinker
User
Beiträge: 6
Registriert: Sonntag 18. Juli 2010, 17:30

ah super vielen dank an beide, so läuft das ja sofort :)

gruß
milchtrinker
User
Beiträge: 6
Registriert: Sonntag 18. Juli 2010, 17:30

Ich muss da noch einmal nachfragen, hier mal mein programm (wenn man das so bezeichnen darf) :).

# Hauptstädte raten
import random


# Listen der Kontinente erstellen

europa = {"Albanien":"Tirana","Andorra":"Andorra la Vella","Belgien":"Brüssel","Bosnien und Herzegownina":"Sarajewo","Bulgarien":"Sofia","Dänemark":"Kopenhagen","Deuschland":"Berlin","Estland":"Tallinn","Finnland":"Helsinki","Frankreich":"Paris","Griechenland":"Athen","Irland":"Dublin","Island":"Reykjavik","Italien":"Rom","Kosovo":"Pristina","Kroatien":"Zagreb","Lettland":"Riga","Lichtenstein":"Vaduz","Litauen":"Vilnus","Luxemburg":"Luxemburg","Malta":"Valletta","Mazedonien":"Skopje","Moldawien":"Chisinau","Monaco":"Monaco","Montenegro":"Podgorica","Niederlande":"Amsterdam","Norwegen":"Oslo","Österreich":"Wien","Polen":"Warschau","Portugal":"Lissabon","Rumänien":"Bukarest","Russland":"Moskau","San Marino":"San Marino","Schweden":"Stockholm","Schweiz":"Bern","Serbien":"Belgrad","Slowakei":"Bratislava","Slowenien":"Ljublijana","Spanien":"Madrid","Tschechien":"Prag","Ukraine":"Kiew","Ungarn":"Budapest","England":"London","Weißrussland":"Minsk"}

euro = random.choice(list(europa.keys()))
hs = europa.items()

for land, stadt in hs:
eingabe = input("Bitte die Stadt von" + euro + "eingeben :")

if eingabe == stadt:
print("richtig")
else:
print("falsch")


Das funktioniert aber so nicht, die Schleife kontrolliert nicht den wirklichen Wert, sondern fängt bei 0 an, ich hab nun zwar meinen Random Wert aber check grad nicht
wie ich ihn vergleiche....
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

milchtrinker hat geschrieben:Das funktioniert aber so nicht, die Schleife kontrolliert nicht den wirklichen Wert, sondern fängt bei 0 an, ich hab nun zwar meinen Random Wert aber check grad nicht
wie ich ihn vergleiche....
Bitte verwende Python-Tags für Python-Quellcode und vermeide das Einstellen von überlangen Zeilen. Python kommt sehr gut mit folgender Syntax klar:

Code: Alles auswählen

europa = {"Albanien": "Tirana",
          "Andorra": "Andorra la Vella",
          "Belgien": "Brüssel",
          "Bosnien und Herzegownina": "Sarajewo",
          ...
          }
Grundsätzlich hast du in deinem Code das Problem, dass es irgendwie unlogisch aussieht, was du da anstellst. Die for-Schleife ist auf jeden Fall merkwürdig. Was möchtest du denn erreichen?

Die von dir gewählten Variablennamen machen das ganze nicht leichter. Wenn sie das ausdrücken sollen, was ich glaube was sie tun sollen, dann hast du das Programm definitiv falsch aufgebaut.
Hier mal ein kurzer Alternativvorschlag

Code: Alles auswählen

country = random.choice(list(europa.keys()))
eingabe =  input("Bitte die Hauptstadt von " + country + " eingeben :")
if eingabe == europa[country]:
    print("richtig")
else:
    print("falsch")
BlackJack

Wobei hier die Verwendung eines Dictionaries vielleicht nicht die beste Wahl ist. Eine Liste mit Tupeln (Land, Hauptstadt) ist IMHO passender. Man will ja zufällig so ein *Paar* auswählen, und nicht nur den Schlüssel.
Benutzeravatar
noisefloor
User
Beiträge: 4209
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

was soll das Programm denn am Ende machen? Alle Länder in zufälliger Reihenfolge abfragen abfragen für ein Land die Hauptstadt fragen?

BTW: London ist nicht die Hauptstadt von England... :twisted:

Gruß, noisefloor
milchtrinker
User
Beiträge: 6
Registriert: Sonntag 18. Juli 2010, 17:30

@me

sorry .. werde ich berücksichtigen. So wie du das da gepostet hast, läuft es genau so wie ich es gedacht habe.

@noisefloor

genau das soll es und ups peinlich :)

@blackjack

ich hatte zuerst 2 listen mit denen ich es gelöst hatte und nun das dict.. , als nächstes kommt tupel, ich mache das ja im grunde um es zu verstehen und versuche es auf jede art zu lösen :X
BlackJack

@noisefloor: Wieso ist London nicht die Hauptstadt von England!?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

BlackJack hat geschrieben:@noisefloor: Wieso ist London nicht die Hauptstadt von England!?
Naja, er wird wohl an das übergeordnete gedacht haben... aber die natürlichen Zahlen sind ja auch in den ganzen Zahlen enthalten :-D
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

BlackJack hat geschrieben:Wobei hier die Verwendung eines Dictionaries vielleicht nicht die beste Wahl ist. Eine Liste mit Tupeln (Land, Hauptstadt) ist IMHO passender. Man will ja zufällig so ein *Paar* auswählen, und nicht nur den Schlüssel.
Ich dachte schon an mögliche Erweiterungen mit dem Land als Primärschlüssel:

Code: Alles auswählen

laender = {"Deutschland": {"hauptstadt": "Berlin",
                           "einwohner": 82000000
                           },
           "Frankreich":  {"hauptstadt": "Paris",
                           "einwohner": 66000000
                           }
          }
Benutzeravatar
noisefloor
User
Beiträge: 4209
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@BlackJack: London ist die Hauptstadt des "Vereinigten Königreichs" - das ist zumindest politisch die Korrekte Bezeichnung. :-)

England ist nur eine Teilmenge davon.

Gruß, noisefloor
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Aber London ist *auch* die Hauptstadt von England, ebenso wie Edinburgh die Hauptstadt von Schottland ist. Die Frage ist also eher, ob England ein eigenständiger Staat ist - aber die Behauptung, dass London die Hauptstadt von England sei, ist 100% i.O. :)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

noisefloor hat geschrieben:Hallo,

@BlackJack: London ist die Hauptstadt des "Vereinigten Königreichs" - das ist zumindest politisch die Korrekte Bezeichnung. :-)

England ist nur eine Teilmenge davon.
Und von dieser Teilmenge ist London eben auch die Hauptstadt (http://de.wikipedia.org/wiki/England). Berlin ist zwar Bundeshauptstadt, aber eben auch Landeshauptstadt des gleichnahmigen Bundeslandes.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

England hat - im Gegensatz zu anderen Landesteilen des UK - kein Landesparlament oder eine Landesregierung. Und das Vereinigte Königreich hat auch keine (schriftlich fixierte) Verfassung. Ergo: Wenn man spitzfindig ist, kann man sagen, daß London zwar die Hauptstadt des UK ist, England aber gar keine Hauptstadt hat bzw. braucht.

Die Verwaltungseinheiten in England sind derart .... nun ja, historisch ist wohl das richtige Wort, daß man auf manche Besonderheit treffen kann.
Benutzeravatar
noisefloor
User
Beiträge: 4209
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
aber eben auch Landeshauptstadt des gleichnahmigen Bundeslandes.
Das geht bei Stadtstaaten ja auch schlecht anders. :lol:

Jetzt haben alle was über Geographie gelernt... nur Python ist auf der Strecke geblieben. :wink:

Gruß, noisefloor
Antworten