Hallo , bin absoluter Anfänger .
Ich wollte aus einer Liste die lauter Dictionaries enthält, die Keys der einzelnen Dictionaries prüfen ob sie gleich sind.
Habe mir auch einige Funktionen zu Dictioinaries angeschaut, verstehe diese auch soweit, mein Problem ist es halt ich bekomme keine vernünftige Umsetzung heraus.
Hat jemand einen Rat oder Tip wie man am besten vorgeht ?
gruss und danke gurami
Dictionaries und Schlüsssel
so ungefähr?
Code: Alles auswählen
d1 = { 1:2, 3:4 }
d2 = {4:2, 3:4 }
print set(d1.keys()) & set(d2.keys())
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Willkommen im Forum!
Ich verstehe nicht so ganz, was du willst. Willst du ueberpruefen, dass alle die gleichen Schluessel haben? Oder ob die jew. Schluessel die gleichen Werte haben?
Fuer ersteren Fall:
Der Ablauf ist ganz einfach: Du definierst eine Funktion, die die keys auf Gleichheit testet.
Du bindest deinen Startwert an die Testfunktion (man kann den natuerlich auch fest verdrahten und spart sich ``partial`` damit, sollte man aber nicht)
Du fuehrst den test auf alle Dicts aus, sind alle True, sind die keys gleich.
Du koenntest aber mal erzaehlen, fuer was du das verwenden willst, der Ansatz ist IMHO seltsam.
Ich verstehe nicht so ganz, was du willst. Willst du ueberpruefen, dass alle die gleichen Schluessel haben? Oder ob die jew. Schluessel die gleichen Werte haben?
Fuer ersteren Fall:
Code: Alles auswählen
In [25]: a = dict(one=1, two=2)
In [26]: b = dict(one=1, two=2)
In [27]: c = dict(one=1, two=2)
In [28]: x = [a,b,c]
In [29]: from functools import partial
In [30]: test = lambda x,y: x.keys() == y.keys()
In [31]: initialized_test = partial(test, x[0])
In [32]: all(initialized_test(d) for d in x)
Out[32]: True
In [33]: x[0] = dict(three=3, four=4)
In [34]: all(initialized_test(d) for d in x)
Out[34]: False
Du bindest deinen Startwert an die Testfunktion (man kann den natuerlich auch fest verdrahten und spart sich ``partial`` damit, sollte man aber nicht)
Du fuehrst den test auf alle Dicts aus, sind alle True, sind die keys gleich.
Du koenntest aber mal erzaehlen, fuer was du das verwenden willst, der Ansatz ist IMHO seltsam.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Das ganze ist ein Teil eines Bioinformatik Programmes, was ich am schreiben bin.
Du hast eine Liste mit Dictionaries, wobei die Keys, Organismen namen sind und der Value Sequenzen der Organismen.
Sind die Keys gleich , also der gleicher Organismus sollen die Sequenzen aneinander gehängt werden.
Mein Problem ist halt , da meine Programmierkenntnisse sind so gut sind, ich verstehe zwar einzelene Programmcodes, bekomme aber keine Vernünftigen Ansatz zusammen.
Ich habe schwierigkeiten ein Programm komplett umzusetzen.
Dann kommt momentannoch dazu, das ich Python dabei lernen muss.
gruss gurami
Du hast eine Liste mit Dictionaries, wobei die Keys, Organismen namen sind und der Value Sequenzen der Organismen.
Sind die Keys gleich , also der gleicher Organismus sollen die Sequenzen aneinander gehängt werden.
Mein Problem ist halt , da meine Programmierkenntnisse sind so gut sind, ich verstehe zwar einzelene Programmcodes, bekomme aber keine Vernünftigen Ansatz zusammen.
Ich habe schwierigkeiten ein Programm komplett umzusetzen.
Dann kommt momentannoch dazu, das ich Python dabei lernen muss.
gruss gurami
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
@jbs Alles was du machst ist die Schnittmenge der Keys zu ermitteln, ich glaube das hilft wenig.
Fuer das Problem ist es aber besser, wenn du die Organismen als Klasse beschreibst, damit wirst du auch die Komplexitaet mit den Dictionaries los und kannst die Organismen direkt vergleichen:
Fuer das Problem ist es aber besser, wenn du die Organismen als Klasse beschreibst, damit wirst du auch die Komplexitaet mit den Dictionaries los und kannst die Organismen direkt vergleichen:
Code: Alles auswählen
class Organism(object):
def __init__(self, name, sequence):
self.name = name
self.sequence = sequence
def __eq__(self, other):
return self.name == other.name
def __add__(self, other):
return Organism(self.name, self.sequence + other.sequence)
In [88]: a = Organism("Hamster", "xyz")
In [89]: b = Organism("Hamster", "abc")
In [90]: a + b
Out[90]: <__main__.Organism object at 0x2c9d7d0>
In [91]: a == b
Out[91]: True
Zuletzt geändert von cofi am Dienstag 22. September 2009, 14:55, insgesamt 1-mal geändert.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Du hast da glaube ich etwas vergessen:cofi hat geschrieben:Code: Alles auswählen
True if self.name == other.name else False
Code: Alles auswählen
(True if self.name == other.name else False) == True
Das Leben ist wie ein Tennisball.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Pah! Viel zu einfach!EyDu hat geschrieben:Du hast da glaube ich etwas vergessen:cofi hat geschrieben:Code: Alles auswählen
True if self.name == other.name else False
Code: Alles auswählen
(True if self.name == other.name else False) == True
Code: Alles auswählen
bool((True if self.name == other.name else False) == True) or False
Code: Alles auswählen
return self.name == other.name
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
@cofi: Ich weiß. Aber mit war nicht klar was er haben wollte.
Ich wollte aus einer Liste die lauter Dictionaries enthält, die Keys der einzelnen Dictionaries prüfen ob sie gleich sind.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]