Как отсортировать словарь по его значениям - PullRequest
0 голосов
/ 27 июня 2019

Я работаю над файлом Excel, чтобы показать данные в новом окне tkinter. Я хочу отсортировать строки с использованием значений столбца агента и воспроизвести их в окне tkinter

Я пытался использовать условие и итерацию, но не могу сделать это правильно.

Вот данные:

  Country       Port incoterm Capacity    Date Agent  $ value      Total
0   Japan   Yokohama      FOB    20ton  2019/5   Sam   2650.6  2650600.0
1   China     Ningbo      DAT    40ton  2019/1    Li   2650.6  2385540.0
2     USA  Baltimore      FOB    Other  2018/9  John   2650.6  4240960.0
3  Russia     Moscow      EXW    20ton  2019/1  Vlad   2650.6  2120480.0
4   Japan      Tokyo      FOB    20ton  2019/1   Sam   2650.6  2915660.0
5   Japan      Tokyo      FOB    20ton  2019/1  Dave   2650.6  3180720.0
6   China   Shanghai      EXW    40ton  2019/1    Li   2500.6  3128250.6

Вот код:

data = pd.read_excel("example.xlsx")
df = pd.DataFrame(data)
a = df.loc[(df.Country == 'Japan') & (df.incoterm == 'FOB') & (df.Capacity 
== '20ton') & (df.Port == 'Tokyo')]
_a = pd.DataFrame(a)
root = Tk()

for agent in _a.itertuples():
    if agent.Agent is agent.Agent:
        temp_agent = '{0}'.format(agent.Agent)
        ttk.Label(root, text="Agent:"+temp_agent).pack()
        for data in _a.itertuples():
            temp_text = '{0} {1} - ({2})'.format(data.Country, 
            data.incoterm, data.Total)
            ttk.Label(root, text=temp_text).pack()
            print (temp_text)
mainloop()

Выход:

Sam
Japan FOB - (2915660.0)
Japan FOB - (3180720.0)
Dave
Japan FOB - (2915660.0)
Japan FOB - (3180720.0)

Ожидаемый результат:

Sam
Japan FOB - (2915660.0)
Dave
Japan FOB - (3180720.0)

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Вам не нужен второй цикл.

Использование:

_a = df.loc[(df.Country == 'Japan') & (df.incoterm == 'FOB') & (df.Capacity == '20ton') & (df.Port == 'Tokyo')]

for agent in _a.itertuples():
    if agent.Agent is agent.Agent:
        temp_agent = '{0}'.format(agent.Agent)
        print(temp_agent)
        temp_text = '{0} {1} - ({2})'.format(agent.Country, agent.incoterm, agent.Total)
        print (temp_text)

Вывод:

Sam
Japan FOB - (2915660.0)
Dave
Japan FOB - (3180720.0)
0 голосов
/ 27 июня 2019
for key, value in sorted(mydict.items(), key=lambda item: item[1]):
    print("%s: %s" % (key, value))

, если вы хотите отсортировать по значению, это может помочь. он будет отсортирован по ключу и его значению, и он будет повторяться в целом. в теории это может сработать. PS: еще не тестировал

справочно https://www.saltycrane.com/blog/2007/09/how-to-sort-python-dictionary-by-keys/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...