Python CSV поиск конкретных значений после чтения в словарь - PullRequest
2 голосов
/ 06 февраля 2011

Мне нужна небольшая помощь в чтении определенных значений в словарь с использованием Python.У меня есть CSV-файл с номерами пользователей.Таким образом, пользователь 1,2,3 ... каждый пользователь находится в определенном отделе 1,2,3 ... и каждый отдел находится в определенном здании 1,2,3 ... Так что мне нужно знать, как я могу перечислитьвсе пользователи в отделе один в здании 1, затем в отделе 2 в здании 1 и так далее.Я пытался и прочитал все в огромный словарь, используя csv.ReadDict, но это сработало бы, если бы я мог искать, какие записи я читаю в каждом словаре словарей.Есть идеи, как разобраться в этом файле?CSV имеет более 150 000 записей для пользователей.Каждая строка является новым пользователем и содержит 3 атрибута: имя_пользователя, номер отдела, здание отдела.Есть 100 отделов и 100 зданий и 150 000 пользователей.Есть какие-нибудь идеи относительно короткого сценария, чтобы разобраться в них?Заранее спасибо за помощь

1 Ответ

2 голосов
/ 06 февраля 2011

Подход грубой силы будет выглядеть как

import csv
csvFile = csv.reader(open('myfile.csv'))
data = list(csvFile)
data.sort(key=lambda x: (x[2], x[1], x[0]))

Затем оно может быть расширено до

import csv
import collections

csvFile = csv.reader(open('myfile.csv'))
data = collections.defaultdict(lambda: collections.defaultdict(list))

for name, dept, building in csvFile:
    data[building][dept].append(name)

buildings = data.keys()
buildings.sort()
for building in buildings:
    print "Building {0}".format(building)

    depts = data[building].keys()
    depts.sort()
    for dept in depts:
        print "  Dept {0}".format(dept)

        names = data[building][dept]
        names.sort()
        for name in names:
            print "   ",name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...