从字典收集的长度值列表的顺序不正确

时间:2015-07-31 23:36:24

标签: python dictionary set

这是我的代码:

chile_ranks = {'ghost': 1, 'habanero': 2, 'cayenne': 3}
rank_dict = {rank: name for name, rank in chile_ranks.items()}
chile_len_set = {len(name) for name in rank_dict.values()}
print(rank_dict)
print(chile_len_set)

输出:

{1: 'ghost', 2: 'habanero', 3: 'cayenne'}
set([8, 5, 7])

我想分别打印项目值的长度,因为它们在字典中排列,但它们以任意方式附加到集合中。应该是这样的:

set([5, 8, 7])

2 个答案:

答案 0 :(得分:1)

集没有已定义的顺序。如果不编写自己的打印功能,这是不可能的,例如可以使用sorted

  

set对象是不同的可哈希对象的无序集合   https://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset

如果要维护订单,可能需要使用普通列表。需要以其他方式确保唯一性,例如在更新之前检查列表。

答案 1 :(得分:0)

没有理由在此处创建set,除非你想丢掉重复项(set s),这会导致'spicy'之类没有记录值(相同)长度为'ghost')。如果你想打印长度,我建议你直接从原始字典中删除。但是,字典是像set那样任意排序的,所以你必须对它进行排序:

>>> chile_ranks = {'ghost': 1, 'habanero': 2, 'cayenne': 3}
>>> rank_dict = {rank: name for name, rank in chile_ranks.items()}
>>> chile_len_set = {len(name) for name in rank_dict.values()}
>>> print(rank_dict)
{1: 'ghost', 2: 'habanero', 3: 'cayenne'}
>>> print(chile_len_set)
{8, 5, 7}
>>> print(*(len(rank_dict[key]) for key in sorted(rank_dict)))
5 8 7