How to get ordered set? [duplicate]

2020-05-07 08:27发布

EDIT: Thanks. I assumed sets were ordered since the output is almost in alphabetical order. But yes I want an ordered set.

def create_table(secret):    
    sec = set(secret) 
    alpha = set("abcdefghiklmnopqrstuvwxyz")
    bet = alpha - sec

    newSecret = secret & bet

    print newSecret



 OUTPUT:  set(['A', 'C', 'B', 'E', 'D', 'G', 'F', 'I', 'H', 'K', 'M', 'L', 'O', 'N', 'Q', 'P', 'S', 'R', 'U', 'T', 'W', 'V', 'Y', 'X', 'Z'])

How do I create an ordered set?

Example: If I take the string "mathematics" and the string "abcdefghiklmnopqrstuvwxyz", essentially the new string should be "MATHEICSBDFGKLNOPQRUVWXYZ" (assuming i have the code to uppercase the string). There is no 'J' in this string so it isn't a typo.

I'm trying to take the unique characters from the variable 'secret' and unique characters from the variable 'alpha' and get ordered unique characters from both.

2条回答
女痞
2楼-- · 2020-05-07 08:45

Python doesn't have an OrderedSet; usually we fake it with an OrderedDict.

For example:

>>> from collections import OrderedDict
>>> s = "mathematics"
>>> alpha = "abcdefghiklmnopqrstuvwxyz"
>>> d = OrderedDict.fromkeys(s+alpha)
>>> d
OrderedDict([('m', None), ('a', None), ('t', None), ('h', None), ('e', None), ('i', None), ('c', None), ('s', None), ('b', None), ('d', None), ('f', None), ('g', None), ('k', None), ('l', None), ('n', None), ('o', None), ('p', None), ('q', None), ('r', None), ('u', None), ('v', None), ('w', None), ('x', None), ('y', None), ('z', None)])
>>> ''.join(d)
'matheicsbdfgklnopqruvwxyz'

This doesn't quite work as well as an OrderedSet would, but is often close enough for government work.

查看更多
甜甜的少女心
3楼-- · 2020-05-07 08:47

It sounds like you want an ordered set, ordered by the first occurrence of the item within the first string, or (for items not present in the first string) the first occurrence of the item within the second string.

Easiest thing to do is to have a set, and an string. Iterate over the first string; for each item, if it's not in the set, add it to the set and append it to the string. Then do the same for the second string.

查看更多
登录 后发表回答