Список ссылок на предметы в словаре - PullRequest
0 голосов
/ 03 января 2019

Есть ли в python способ создать список, в котором каждый элемент является ссылкой на элемент в словаре?Таким образом, я могу поддерживать отсортированный список, а также иметь возможность изменять значение путем индексации в словаре.

d = {
  'price_one': 12,
  'price_two': 13,
  'price_three': 5
}

sorted_list = [ptr_to_price_three, ptr_to_price_one, ptr_to_price_two]
print(sorted_list) # [5, 12, 13]

d['price_one'] = 1

sorted_list.sort() # [ptr_to_price_one, ptr_to_price_three, ptr_to_price_two]
print(sorted_list) # [1, 5, 13]

Ответы [ 3 ]

0 голосов
/ 03 января 2019

Вы упомянули Python в целом.Вы можете использовать фрейм данных:

import pandas as pd

d = {
  'price_one': 12,
  'price_two': 13,
  'price_three': 5
}

df = pd.DataFrame(list(d.values()), columns=['val'], index=d.keys())
df.loc['price_one'] = 1
df.sort_values(['val'])

Выходы:

enter image description here

0 голосов
/ 03 января 2019

Ключи словаря являются ссылками на определенные записи в словаре.

Функция для генерации списка ключей словаря в порядке значений записей словаря:

def sorted_keys(d):
    return sorted(d.keys(), key=lambda k: d[k])

так, чтобы получить доступ к наименьшей цене в вашем примере:

ks = sorted_keys(d)
smallest = d[ ks[0] ]

Проблема в том, что вы должны пересчитать ваш заказ при любой вставке, изменении или удалении словаря. Их было бы трудно перехватить, поэтому лучше сохранять контроль и пересчитывать порядок именно тогда, когда вы хотите его использовать.

Вы можете похоронить все это в class SortedDict(dict), который переопределяет функцию get словаря.

0 голосов
/ 03 января 2019

Попробуйте это:

d = {
    'price_one': 12,
    'price_two': 13,
    'price_three': 5
}

def get_sorted(d):
    sorted_list = sorted(list(d.values()))
    return tuple(zip(sorted_list, d[key] for key in sorted_list))
# end get_sorted

print(get_sorted(d))

d['price_one'] = 1

print(get_sorted(d))

Обратите внимание, что вам придется звонить get_sorted(d) каждый раз ...

Кроме того, он возвращает набор пар (ключ, значение), отсортированных по их ключам. Если вы хотите получить доступ, скажем, 3-е значение, выполните get_sorted(d)[2][1]. 2 для третьей пары, 1 для значения.

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