Python 将顺序排序从列表转换为集合的数据结构

Python 将顺序排序从列表转换为集合的数据结构,python,python-3.x,list,set,Python,Python 3.x,List,Set,基本上,我的定义是这样的 nodes = ['Unix', 'BSD', 'Linux'] 当我尝试这个的时候 print(set(nodes)) 我期待它的结果 {'Unix', 'BSD', 'Linux'} 但我有这个 {'BSD', 'Linux', 'Unix'} 我不想破坏节点的顺序,有没有好的方法?集合和字典是没有顺序的,因为它们是基于散列的,所以根据输入的内容,计算一个散列值来将给定元素与键相关联。这就是为什么访问字典或集合是快速的O(1),但是如果您需要有序的数据,它可

基本上,我的定义是这样的

nodes = ['Unix', 'BSD', 'Linux']
当我尝试这个的时候

print(set(nodes))
我期待它的结果

{'Unix', 'BSD', 'Linux'}
但我有这个

{'BSD', 'Linux', 'Unix'}

我不想破坏节点的顺序,有没有好的方法?

集合和
字典是没有顺序的,因为它们是基于
散列的,所以根据输入的内容,计算一个
散列值来将给定元素与键相关联。这就是为什么访问字典或集合是快速的
O(1)
,但是如果您需要有序的数据,它可能不是最佳选择

那么,您可能正试图通过创建一个集合来消除重复项?相反,您可以使用
OrderedDict
并访问
以获得唯一列表

from collections import OrderedDict


nodes = ['Unix', 'BSD', 'Linux']
uniques = OrderedDict((x, True) for x in nodes).keys()

集合
字典
是基于
散列
的,因此根据输入内容,计算一个
散列
值以将给定元素与键关联起来。这就是为什么访问字典或集合是快速的
O(1)
,但是如果您需要有序的数据,它可能不是最佳选择

那么,您可能正试图通过创建一个集合来消除重复项?相反,您可以使用
OrderedDict
并访问
以获得唯一列表

from collections import OrderedDict


nodes = ['Unix', 'BSD', 'Linux']
uniques = OrderedDict((x, True) for x in nodes).keys()
您有两个选择:

第一种选择:

使用有序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'}
['Unix', 'BSD', 'Linux']
现在做一些事情,比如将列表转换为set或任何你想做的事情,最后再次转换为如下列表:

new=[]
for i in set(nodes):
    for k,j in order.items():
        if i==j:
            new.insert(k,j)

print(new)
现在它将给出:

{0: 'Unix', 1: 'BSD', 2: 'Linux'}
['Unix', 'BSD', 'Linux']
您有两个选择:

第一种选择:

使用有序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'}
['Unix', 'BSD', 'Linux']
现在做一些事情,比如将列表转换为set或任何你想做的事情,最后再次转换为如下列表:

new=[]
for i in set(nodes):
    for k,j in order.items():
        if i==j:
            new.insert(k,j)

print(new)
现在它将给出:

{0: 'Unix', 1: 'BSD', 2: 'Linux'}
['Unix', 'BSD', 'Linux']

集合未排序。为了维持秩序(简单),使用列表或元组。这是我的家庭作业,所以我必须按设置输出。你的家庭作业到底要求你做什么?恐怕你不能既有顺序又有一套(除非你使用,我怀疑这是在家庭作业问题中提出的)。确保问题是什么。也许这意味着,“从重复的项目中创建一个集合,然后对结果进行排序”…集合没有排序。为了维持秩序(简单),使用列表或元组。这是我的家庭作业,所以我必须按设置输出。你的家庭作业到底要求你做什么?恐怕你不能既有顺序又有一套(除非你使用,我怀疑这是在家庭作业问题中提出的)。确保问题是什么。也许这意味着,“从重复的项目中创建一个集合,然后对结果进行排序”。。。