Python lista elemeket csoportositani?
Pl vannak kulonbozo adataim.
Telepules
Homerseklet.
[BP 12]
[DE 11]
[BP 16]
ES IGY tovabb...
Hogy tudom azt megoldani hogy osszegyujtom az osszes varost es az egyszer jelenjen meg es mellette a homerseklet?
Igy BP 12,16,11,12 stb
Egy lehetőség:
from collections import defaultdict
lista = [['BP', 12], ['DE', 11], ['BP', 16]]
d = defaultdict(list)
for l in lista:
d[l[0]].append(l[1])
A defaultdict olyan, mint a "sima" dict, de nem kell vizsgálnod, hogy létezik-e benne az adott kulcs, mert ha nem, akkor létrehozza automatikusan olyan típussal, amit megadtál neki paraméterként.
Pl: defaultdict(int) esetén 0 lesz az érték
defaultdict(list) esetén üres lista.
Szóval egy olyan dictionary-t hozunk létre, aminek a kulcsai a városok, az értékek pedig listák, amikben gyűjtjük a számokat.
Az append ehhez a listához veszi fel mindig az új hőmérséklet értékeket.
Itt egy egyszerűsített, de hozzáfűzésekkel dokumentált példa (mivel gyanítom a kedves kérdező tanuló, ezért az alapokkal érdemes tisztában lennie), a Python beépített alap függvényeire és adattípusaira alapozva - a felső "Run" gombra kattintva látható az eredmény:
Tehát kedves kérdező, a településeket és a hozzá tartozó hőmérsékletet jelen esetben egy két dimenziós listában (nevezhetjük akár táblázatnak is, aminek sorai és oszlopai vannak) tároljuk.
Mivel ebben a listában egy város többször is előfordulhat, csoportosítani szeretnénk.
Ehhez egy szótár (dictionary) adattípust használunk.
A szótár egy olyan adattípus, aminek van egy kulcsa és egy hozzá tartozó értéke - például:
kutya = {
"neve": "Morzsi",
"fajta": "puli",
"színe": "fekete"
"tömege": 13
"jelleme": ["bátor", "ugatós", "mozgékony"]
}
itt a "kutya" egy szótár típusú változó, aminek vannak "neve", "fajta", "színe", "tömege" és "jelleme" kulcsai (a kulcsokat a keys() metódussal tudjuk kilistázni) és hozzájuk tartozik egy "Morzsi", "puli", "fekete" karakterláncok, a 13-as szám és a ["bátor", "ugatós", "mozgékony"] lista, mint érték.
Ha egy kulcshoz tartozó értéket akarunk lekérdezni, azt így tudjuk megtenni:
kutya["neve"]
a visszaadott érték
Morzsi
lesz.
Ha a szótárhoz akarunk egy új értéket felvenni, azt így tehetjük meg:
kutya["neme"] = "kan"
Jelen példában a csoportosításhoz használt szótár kulcsai a városok, a hozzá tartozó értékek pedig listák, amiben az adott városhoz tartozó hőmérsékletek vannak (ez utóbbi listát az append() metódussal lehet bővíteni).
Ok, a kételemű listából álló lista valójában egy táblázat. Ha Python és táblázat, akkor pandas:
import pandas as pd
lista = [['BP', 12], ['DE', 11], ['BP', 16], ['DE', 14], ['BP', 26]]
(
pd.DataFrame(lista, columns= ['varos', 'homerseklet'])
.groupby('varos')
.agg(list)
)
Ennyi.
Köszönöm, de így oldottam meg.
varosok = []
for sor in adatok:
if sor[0] not in varosok:
varosok.append(sor[0])
print(varosok)
for varos in varosok:
homerseklet = []
for sor in adatok:
if varos == sor[0]:
homerseklet.append(sor[3])
print(varos,homerseklet)
Jaj, ez így szörnyű! No offense.
Annyiszor végigmész a teljes adatsoron, ahány várost találtál.
Az #5-ös olyan szépen leírta. Ott a link is.
Nézd meg még egyszer!
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!