2015-05-19 3 views
0

Я пытаюсь создать отчет и распечатать следующую таблицу в файл в Python:Установка порядка вывода для таблицы

from tabulate import tabulate 
first_table_dict = {} 
first_table_dict["Total agents"]  = len(agentUserIdDict)   
first_table_dict["Total users"]   = len(pure_user_dict) 
first_table_dict["Users with agent"] = len(pure_users_with_agents_dict) 
first_table_dict["Users with invites"] = len(user_id_invite_dict) 
first_table_dict["RUURL accounts"]  = len(ruurl_set) 
f.write(tabulate(first_table_dict.items(), headers = ["Category", "Total"])) 

Выход, однако:

Category    Total 
------------------ ------- 
Users with invites 81533 
Total users   90818 
Users with agent  70060 
Total agents   45571 
RUURL accounts  81288 

Я понимаю, что словари не упорядочены. Как получить список в том порядке, который я хочу?

+0

Сортируя это! См. ['Sorted'] (https://docs.python.org/2/library/functions.html#sorted) –

+5

использовать Упорядоченный Dict – Ajay

+0

[Табулат] (https://pypi.python.org/pypi/tabulate) модуль, кажется, список поддержки списков, почему бы не использовать это вместо dict? –

ответ

0

Ваша проблема в том, что вы ожидаете:

>>> {'a': 1, 'b': 2}.items() 
[('a', 1), ('b', 2)] 

Когда на самом деле, иногда вы получаете

[('b', 2), ('a', 1)] 

Почему не просто построить эту структуру данных напрямую?

first_table = [ 
    ("Total agents"  , len(agentUserIdDict)),   
    ("Total users"   , len(pure_user_dict)), 
    ("Users with agent" , len(pure_users_with_agents_dict)), 
    ("Users with invites" , len(user_id_invite_dict)), 
    ("RUURL accounts"  , len(ruurl_set)) 
] 
f.write(tabulate(first_table, headers = ["Category", "Total"])) 
0
from collections import OrderedDict 
from tabulate import tabulate 
b=OrderedDict() 
b["Total agents"] = 45571 
b["Total users"] = 90818 
b["Users with agent"] = 70060 
b["Users with invites"] = 81533 
b["RUURL accounts"] = 81288 

print tabulate(b.items(),headers = ["Category", "Total"]) 
Category    Total 
------------------ ------- 
Total agents   45571 
Total users   90818 
Users with agent  70060 
Users with invites 81533 
RUURL accounts  81288 
+0

Где вы устанавливаете 'myordered_dict'? – Eric

+0

@Eric Я пропустил эту строку ... обновил – Ajay

+0

Но почему 'OrderedDict (a) .items()'? Это то же самое, что просто использовать 'a' прямо! – Eric

0

Hashtables не сортируется (это поражения цели). Вместо этого используйте упорядоченную структуру данных или попытайтесь обработать ее по-разному. Например, если ваши данные поступают из базы данных, вы можете обрабатывать порядок на уровне db и просто распечатывать данные, которые хранятся в вашем выходе.

Смежные вопросы