nodes = ['Unix', 'BSD', 'Linux']
当我尝试这个时
print(set(nodes))
我期待它的结果
{'Unix', 'BSD', 'Linux'}
但我得到了这个
{'BSD', 'Linux', 'Unix'}
我不想破坏节点的顺序是否有好的方法呢?
答案 0 :(得分:2)
Sets
和Dictionaries
未订购,因为它们基于hash
,因此根据输入的内容,hash
值为计算将您的给定元素与键相关联。这就是为什么访问字典或集合的速度很快O(1)
,但如果您需要有序数据,则可能不是最佳选择。
所以你可能正试图通过创建一个集来摆脱重复?相反,您可以使用OrderedDict
并访问keys
以获取唯一列表。
from collections import OrderedDict
nodes = ['Unix', 'BSD', 'Linux']
uniques = OrderedDict((x, True) for x in nodes).keys()
答案 1 :(得分:1)
您有两种选择:
第一个选项:
使用有序的dict:
正如@ user1767754所建议的那样:
from collections import OrderedDict
nodes = ['Unix', 'BSD', 'Linux']
uniques = OrderedDict((x, True) for x in nodes).keys()
第二种方法跟踪索引和值:
所以首先用索引创建一个dict,值:
nodes = ['Unix', 'BSD', 'Linux']
order={}
for i,j in enumerate(nodes):
order[i]=j
print(order)
它会给出:
{0: 'Unix', 1: 'BSD', 2: 'Linux'}
现在做你喜欢的事情,比如将列表转换为set或者你想要的任何内容,最后再转换为list,如下所示:
new=[]
for i in set(nodes):
for k,j in order.items():
if i==j:
new.insert(k,j)
print(new)
现在它将给出:
['Unix', 'BSD', 'Linux']