1

我有一本带钥匙和物品的字典。基本上,键保留人名,值保留薪水。我想要的是根据它们的频率以更高的价值订购物品。

d = {'name-1': 100, 'name-2':90, 'name-3': 80, 'name-1': 80}
    print OrderedDict(sorted(d.items(), key=lambda t: t[1]))

所以,输出应该是('name-1':100)。因为,在字典中出现两次,薪水最高。

我只能对这个字典进行排序。你能帮我得到那个结果吗?

4

3 回答 3

4

一种方法是使用字典,但将每个键的值存储在列表中

>>> d = {'name-1': [100, 80], 'name-2':[90], 'name-3': [80]}

进而

>>> sorted(d, key=lambda x:max(d.get(x)), reverse=True)
['name-1', 'name-2', 'name-3']
于 2012-09-26T03:53:33.523 回答
3

正如其他人指出的那样,您不能在字典中有重复的键...但是您可以轻松地使用列表

#d = (('name-1', 100), ('name-2',90), ('name-3',80), ('name-1',80))
names = "name1,name2,name3,name1".split(",")
salaries = map(int,"100,90,80,80".split(","))
d = zip(names,salaries)
print max(d,key=lambda x:names.count(x[0])*1000+x[1])

#('name-1', 100)
print sorted(d,key=lambda x:names.count(x[0])*1000+x[1],reverse=True)
[('name-1', 100), ('name-1', 80), ('name-2', 90), ('name-3', 80)]
于 2012-09-26T03:53:10.687 回答
0

您是否尝试过创建该d字典?

>>> d = {'name-1': 100, 'name-2':90, 'name-3': 80, 'name-1': 80}
>>> d
{'name-1': 80, 'name-2': 90, 'name-3': 80} # notice 'name-1' is only in there once.
>>> 

如果您尝试在 dict 中创建具有相同名称的第二个键,它将覆盖与该键关联的值。字典中的每个键都是唯一的……如果它们不是唯一的,字典将不再有用。

如果你需要这种数据结构,你可以创建一个嵌套的元组/列表......但是,它会慢得多,因为找到一个键需要遍历列表中的所有对象:

d = (
        ('name-1', 100),
        ('name-2', 90),
        ('name-3', 80),
        ('name-1', 80),
     )
于 2012-09-26T03:47:37.287 回答