Skocz do zawartości

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

SonMike

[Python] Zwracanie słownika zamiast listy

Rekomendowane odpowiedzi

Witam!

 

Mam taki kod napisany w Pythonie:

 

import collections

import re

words = re.findall(r'\w+', open('words.txt').read().lower())
most_common = collections.Counter(words).most_common(10)
print(most_common)

 

Skrypt ten zwraca 10 najczęściej występujących słów w tekście wewnątrz pliku w tym wypadku words.txt.

Wynik zwracany jest jako lista:

 

[('ut', 3), ('in', 3), ('dolor', 2), ('dolore', 2), ('lorem', 1), ('ipsum', 1), ('sit', 1), ('amet', 1), ('consectetur', 1), ('adipiscing', 1)]

 

Ja natomiast chciałbym aby program zwracał dane w formie słownika, najlepiej w postaci kolumny, a nie jednego ciągu. Czy ktoś mógłby mi pomóc w jaki sposób przerobić powyższy kod?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie znam pythona, ale w każdym języku raczej jest podobnie - przeiteruj się po kolekcji i użyj print format.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

(...)

Ja natomiast chciałbym aby program zwracał dane w formie słownika, najlepiej w postaci kolumny, a nie jednego ciągu. Czy ktoś mógłby mi pomóc w jaki sposób przerobić powyższy kod?

 

Na szybko co mi przyszło do głowy, pobierać po jednym elemencie z listy, czyli parę ('x', y). Rozbić ją na dwie składowe i dodać do słownika.

 

# -*- coding: utf-8 -*-

lista = [('ut', 3), ('in', 3), ('dolor', 2), ('dolore', 2), ('lorem', 1), ('ipsum', 1), ('sit', 1), ('amet', 1), ('consectetur', 1), ('adipiscing', 1)]

slownik = {}
for i in range(len(lista)):
   elem = lista[i]
   slownik[elem[0]] = elem[1]

# lub trochę mniej czytelnie, ale jedna zmienna mniej:
# for i in range(len(lista)):
#     slownik[lista[i][0]] = lista[i][1]

print(slownik)

# wydrukuje się:
# {'ut': 3, 'in': 3, 'dolor': 2, 'dolore': 2, 'lorem': 1, 'ipsum': 1, 'sit': 1, 'amet': 1, 'consectetur': 1, 'adipiscing': 1}

 

Jak chodzi Ci tylko o wyświetlenie w pionie, to nie trzeba zamieniać na słownik:

 

for i in range(len(lista)):
   print(lista[i]) # wydrukuje się w postaci -> ( 'wyraz', liczba wystąpień )

# lub ładniej, w postaci -> wyraz : liczba_wystąpień
for i in range(len(lista)):
   elem = lista[i]
   print("{} : {}".format(elem[0], elem[1]))

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Na szybko co mi przyszło do głowy, pobierać po jednym elemencie z listy, czyli parę ('x', y). Rozbić ją na dwie składowe i dodać do słownika.

Ale tak samo działa konstruktor słownika ;)

print(dict(most_common))

 

Co do ładnego wypisywania w kolumnach to trzeba jakaś bibliotekę zaprząc albo samemu napisać. Print jest do wypisywania prostych rzeczy, debugowania itp.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

def print_table(table):
   col_width = [max(len(x) for x in col) for col in zip(*table)]
   for line in table:
       print "| " + " | ".join("{0:{1}}".format(x, col_width[i])
                               for i, x in enumerate(line)) + " |"

 

coś takiego znalazłem w gotowcu

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...