字典中对项目的引用列表

时间:2019-01-03 00:08:58

标签: python python-3.x list dictionary pointers

在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 :(得分:1)

您通常提到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

答案 1 :(得分:0)

尝试一下:

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) ...

此外,它还会返回按键对对(键,值)排序的元组。如果您想访问说第三个值,请执行get_sorted(d)[2][1]。第三对的2,该值的1

答案 2 :(得分:0)

字典键是对字典中特定条目的引用。

按字典条目值的顺序生成字典键列表的功能是:

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函数。