2016-11-01 1 views
1

ich ein Tupel, die mit Elementen aus einem Verzeichnis aufgefüllt wird:Richtiger Weg ein Tupel mit den Tasten verketten und Werten

{'C:/foo' : ['bar1', 'bar2'], 'C:/foo2' : ['bar']} 

und ich versuche, jede Taste mit seinen Werten zu verketten:

C:/foo/bar1 
C:/foo/bar2 
C:/foo2/bar 

ich dachte, das würde funktionieren:

[''.join('%s/%s' % (d.keys(), value)) for value in d.values()] 

Aber es ist nur die Taste mit dem Wert in der gleichen Art und Weise wie verketten :

for k,v in d.items(): 
    print(k'/'v) 

Jede Hilfe in diesem Bereich würde sehr geschätzt werden! Wenn ich das falsch mache, sag es mir bitte.

Danke!

+1

Sie über die Werte Looping, müssen Sie den Schlüssel Schleife über, dann Schleife über die Werte für diesen Schlüssel. –

+2

Ihre Forschung wäre einfacher, wenn Sie wüssten, dass es sich um ein Wörterbuch von Stringschlüsseln und Listenwerten handelt, nicht um ein Tupel. – jonrsharpe

+0

Für dieses Beispiel ist es ja ein Wörterbuch. Ich benutze os.walk und das gibt ein Tupel zurück. – i73

Antwort

4

Sie können verwenden, um auf diese Weise Pfade aufzubauen.

import os 
d = {'C:/foo' : ['bar1', 'bar2'], 'C:/foo2': ['bar']} 
for k,v in d.items(): 
    for value in v: 
     print(os.path.join(k,value)) 

Ausgabe

C:/foo2\bar 
C:/foo\bar1 
C:/foo\bar2 

Dann sicherzustellen, dass die Schrägstriche alle der richtige Weg sind, können Sie os.path.normpath

for k,v in d.items(): 
    for value in v: 
     print(os.path.normpath(os.path.join(k,value))) 

Ausgang verwenden

C:\foo2\bar 
C:\foo\bar1 
C:\foo\bar2 

Um klar zu sein, Sie sollte uns bevorzugen ing os.path, weil es die Pfadmanipulation auf betriebssystemspezifische Weise robust handhaben wird. Stellen Sie in diesem Fall sicher, dass die Anzahl der Schrägstriche korrekt ist (einschließlich der erforderlichen Escapes) und welche Schrägstriche (vorwärts oder rückwärts) verwendet werden.

+0

Danke, Cory! – i73

0

Es ist ein Tippfehler in Ihrer Tupeln Liste, ein Doppelpunkt fehlt:

a = {'C:/foo' : ['bar1', 'bar2'], 'C:/foo2': ['bar']} 

for key in a.keys(): 
    vals = a[key] 
    for v in vals: 
     concat = key + '/' + v 
     print concat 
+0

Ah ja, danke. Ich habe nur ein Beispiel gezeigt, ich benutze das nicht in meinem eigentlichen Code :) – i73

1

Sie müssen zuerst durch das Wörterbuch zu durchlaufen, und dann durch die Listen durchlaufen.

Sie können dies in einem einfachen Listenverständnis tun, ohne eine for-Schleife zu verwenden.

files_dict = {'C:/foo' : ['bar1', 'bar2'], 'C:/foo2' : ['bar']} 
filenames = [dir+"/"+file for dir, files in files_dict.items() for file in files] 

Ausgang:

['C:/foo/bar1', 'C:/foo/bar2', 'C:/foo2/bar'] 
+0

Vielen Dank! – i73

Verwandte Themen