Springen naar een specifieke lijn in python file operaties

stemmen
-3

Ik heb een lijst,

brands= [[mercedes], [bmw], [ferrari]]

een bestand met de naam brands.txt

mercedes: a, b, c, g , x , y
bmw: d, e, g, a, b, g, x 
ferrari: x, y, z, a, b, c

en uiteindelijk een andere lijst

variables = [b, c, a, y, x, z]

Wat ik probeer te doen is om een ​​merk te halen in de 1e lijst en vind de variabelen volgens het bestand, dat wordt gesorteerd van zeer de voorkeur van klanten en dit is de code die ik tot dusver heb geschreven

 with open(brands.txt) as f:
    for line in f:
        line=line.replace(\n,).split(,)[1:]
        print(line)
        for i in line:
           for a in brands:
               for j in a:
                   for k in j:
                       if k in i:
                           line=line.split(,)[1:]
                           print line

De verwachte output wanneer het merk mercedeswordt gekozen zal zijn als

[a, b, c, x, y]

volgens zeer voorkeur, maar mijn code werkt niet ... Kunt u mij helpen aan?

De vraag is gesteld op 22/12/2015 om 15:54
user
In andere talen...                            


2 antwoorden

stemmen
0

Ik begreep niet hoe je wilt kiezen (zoals je zegt) een variabele, dus ik gebruikte woordenboeken aan uw tekst gegevens te bewaren.

Probeer het zo

customers = {}
for line in f:
    line_key = line.split(" ")[0][:-1]
    line_values = map(lambda x: x.strip(), line.split(":")[1].split(","))
    customers[line_key] = line_values

bel dan een sleutel

print customers["mercedes"]

Die geeft je

['a', 'b', 'c', 'g', 'x', 'y']

Ik moet erop wijzen als de tekst data beschadigd en komen niet overeen met de namen auto in uw Python-bestand, zal uw woordenboek voor mislukte gesprekken.

antwoordde op 22/12/2015 om 16:10
bron van user

stemmen
0

Ik weet niet zeker wat je wilt doen met elke letter die niet in de lijn, maar u kunt een dict gebruiken om de index in kaart te schrijven en gebruik dat als de sleutel om te sorteren met:

with open("in.txt") as f:
    variables = ["b", "c", "a", "y", "x", "z"]

    key = dict(zip(variables, range(len(variables))))

    d = dict((k, list(map(str.strip, v.split(",")))) for line in f for k, v in (line.strip().split(":"),))

    for k, v in d.items():
        v.sort(key=lambda x: key.get(x, float("inf")))
        print("Key = {}\nSorted values = {}\n".format(k,v))

Output:

Key = bmw
Sorted values = ['b', 'a', 'x', 'd', 'e', 'g', 'g']

Key = ferrari
Sorted values = ['b', 'c', 'a', 'y', 'x', 'z']

Key = mercedes
Sorted values = ['b', 'c', 'a', 'y', 'x', 'g']

Alle waarden in uw dict zal worden in gesorteerde volgorde, met behulp van float("inf")de standaard waarde zal de sleutels niet in het dict worden gesorteerd op het einde van de lijst betekenen.

antwoordde op 22/12/2015 om 16:33
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more