Mam słownik w pliku i powinienem napisać kod Pythona, aby wydrukować klucze i wartości w oddzielnych liniach. (Bez użycia .keys () i .values ().

Dla np. DICT = {"The": "1", "i": "2"} powinien wrócić jako

the:1          
and:2 

Oto mój kod, który próbowałem. Jestem nowym słownikiem Pythona. Pomóż mi to naprawić.

dict2 = {}

f= open("dict.txt", 'r')
    for line in f:
        it = line.split()
        k, v = it[0], it[1:]
        dict2[k] = v
return (dict2)
1
Shraddha 8 grudzień 2013, 00:33

3 odpowiedzi

Najlepsza odpowiedź

Jeśli próbujesz wydrukować kluczowe wartości z słownika w tej samej kolejności, jak pojawiają się w pliku za pomocą standardowego dyktatu, który nie działa (Obiekty DICT Pythona nie utrzymują porządku). Zakładając, że chcesz wydrukować według wartości wartości dyktowania ...

lines = ["the 1", "and 2"]
d = {}

for l in lines:
    k, v = l.split()
    d[k] = v

for key in sorted(d, key=d.get, reverse=True):
    print ":".join([key, d[key]])

Zakładając, że możesz użyć lambda i kontatenacji ciągów.

lines = ["the 1", "and 2"]
d = {}

for l in lines:
    k, v = l.split()
    d[k] = v

for key in sorted(d, key=lambda k: d[k], reverse=True):
    print key + ":" + d[key]

Bez lambda.

for value, key in sorted([(d[k], k) for k in d], reverse=True):
    print key + ":" + value

Zrobić funkcję

def lines_to_dict(lines):
    return_dict = {}
    for line in lines:
        key, value = line.split()
        return_dict[key] = value

    return return_dict

if __name__ == "__main__":

    lines = ["the 1", "and 2"]
    print lines_to_dict(lines)
0
John 7 grudzień 2013, 23:26

line.split() dzieli się na białawsze. Prawdopodobnie chcesz line.split(':').

>>> "the:1".split()
['the:1']
>>> "the:1".split(':')
['the', '1']

Należy również zauważyć

it = line.split(':')
k, v = it[0], it[1:]

Można uprościć do

k, v = line.split(':')

Edytuj: Cóż, w rzeczywistości te dwie robią różne rzeczy, ale jak line.split() powinny mieć tylko 2 elementy, k, v = line.split(':') zrobi to, co chcesz, podczas gdy it[1:] wróciłby ['1'] zamiast ['1'] zamiast ['1'] zamiast ['1'] zamiast {x3}} {X4}}.

Chociaż myślę, że bardziej wdzięczniej radzi sobie z problemami parsowaniem:

it = line.split()
if len(it) != 2:
    print "Error!"
k, v = it[0], it[1]  # note it[1] and not it[1:]
2
Alec 7 grudzień 2013, 20:45

Dopóki klucz / wartość są oba ciągi, możesz analizować słownik i wyodrębnić elementy. Uwaga, ponieważ nie stwarza tego słownika, zduplikowanych elementów, a zamówienie jest zachowane - które możesz uczyć.

import ast

text = '{"the":"1", "and":"2"}'
d = ast.parse(text).body[0].value
for k, v in zip(d.keys, d.values):
    print '{}:{}'.format(k.s, v.s)
0
Jon Clements 7 grudzień 2013, 20:50