这是我的代码:
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])
答案 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