Seite 1 von 1

random.choice auf dictionary

Verfasst: Dienstag 20. Juli 2010, 07:30
von milchtrinker
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..

Re: random.choice auf dictionary

Verfasst: Dienstag 20. Juli 2010, 07:41
von pillmuncher
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.

Re: random.choice auf dictionary

Verfasst: Dienstag 20. Juli 2010, 07:43
von 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.

Re: random.choice auf dictionary

Verfasst: Dienstag 20. Juli 2010, 07:51
von milchtrinker
ah super vielen dank an beide, so läuft das ja sofort :)

gruß

Re: random.choice auf dictionary

Verfasst: Dienstag 20. Juli 2010, 08:05
von milchtrinker
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....

Re: random.choice auf dictionary

Verfasst: Dienstag 20. Juli 2010, 08:23
von /me
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")

Re: random.choice auf dictionary

Verfasst: Dienstag 20. Juli 2010, 08:26
von 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.

Re: random.choice auf dictionary

Verfasst: Dienstag 20. Juli 2010, 08:29
von noisefloor
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

Re: random.choice auf dictionary

Verfasst: Dienstag 20. Juli 2010, 08:34
von milchtrinker
@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

Re: random.choice auf dictionary

Verfasst: Dienstag 20. Juli 2010, 08:40
von BlackJack
@noisefloor: Wieso ist London nicht die Hauptstadt von England!?

Re: random.choice auf dictionary

Verfasst: Dienstag 20. Juli 2010, 08:48
von Hyperion
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

Re: random.choice auf dictionary

Verfasst: Dienstag 20. Juli 2010, 09:29
von /me
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
                           }
          }

Re: random.choice auf dictionary

Verfasst: Dienstag 20. Juli 2010, 11:42
von noisefloor
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

Re: random.choice auf dictionary

Verfasst: Dienstag 20. Juli 2010, 11:46
von Barabbas
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. :)

Re: random.choice auf dictionary

Verfasst: Dienstag 20. Juli 2010, 11:48
von Hyperion
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.

Re: random.choice auf dictionary

Verfasst: Dienstag 20. Juli 2010, 11:56
von CM
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.

Re: random.choice auf dictionary

Verfasst: Dienstag 20. Juli 2010, 12:14
von noisefloor
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