복붙노트

[PYTHON] 사전에 삽입 된 순서대로 항목을 검색하는 방법은 무엇입니까?

PYTHON

사전에 삽입 된 순서대로 항목을 검색하는 방법은 무엇입니까?

삽입 된 순서대로 파이썬 사전에서 항목을 검색 할 수 있습니까?

해결법

  1. ==============================

    1.표준 파이썬 사전은 이것을 할 수 없습니다.

    표준 파이썬 사전은 이것을 할 수 없습니다.

    표준 라이브러리의 콜렉션 모듈에 "순서가 지정된 사전"(삽입 순서를 추적하는)을 추가하는 제안 (PEP 372)이 있습니다. 여기에는 순서가 지정된 사전의 다양한 구현에 대한 링크가 포함되어 있습니다 (Python 요리 책의이 두 가지 조리법 참조).

    코드가 "공식"버전과 호환되도록하려는 경우 (제안서가 최종적으로 승인되는 경우) PEP의 참조 구현을 계속 사용하고자 할 수 있습니다.

    편집 : PEP는 받아 들여지고 파이썬 2.7과 3.1에 추가되었습니다. 문서를 참조하십시오.

  2. ==============================

    2.다른 답변은 정확합니다. 가능하지는 않지만 직접 쓰실 수 있습니다. 그러나 실제로 이런 식으로 구현하는 방법을 잘 모르겠다면 여기에 작성한 dict 하위 클래스가 작성하고 테스트 한 작업이 완료되었습니다. (생성자에 전달 된 값의 순서는 정의되어 있지 않지만 나중에 전달 된 값보다 먼저 나오고 순서가 지정된 딕트가 값으로 초기화되는 것을 허용하지 않을 수 있습니다.)

    다른 답변은 정확합니다. 가능하지는 않지만 직접 쓰실 수 있습니다. 그러나 실제로 이런 식으로 구현하는 방법을 잘 모르겠다면 여기에 작성한 dict 하위 클래스가 작성하고 테스트 한 작업이 완료되었습니다. (생성자에 전달 된 값의 순서는 정의되어 있지 않지만 나중에 전달 된 값보다 먼저 나오고 순서가 지정된 딕트가 값으로 초기화되는 것을 허용하지 않을 수 있습니다.)

    class ordered_dict(dict):
        def __init__(self, *args, **kwargs):
            dict.__init__(self, *args, **kwargs)
            self._order = self.keys()
    
        def __setitem__(self, key, value):
            dict.__setitem__(self, key, value)
            if key in self._order:
                self._order.remove(key)
            self._order.append(key)
    
        def __delitem__(self, key):
            dict.__delitem__(self, key)
            self._order.remove(key)
    
        def order(self):
            return self._order[:]
    
        def ordered_items(self):
            return [(key,self[key]) for key in self._order]
    
    
    od = ordered_dict()
    od["hello"] = "world"
    od["goodbye"] = "cruel world"
    print od.order()            # prints ['hello', 'goodbye']
    
    del od["hello"]
    od["monty"] = "python"
    print od.order()            # prints ['goodbye', 'monty']
    
    od["hello"] = "kitty"
    print od.order()            # prints ['goodbye', 'monty', 'hello']
    
    print od.ordered_items()
    # prints [('goodbye','cruel world'), ('monty','python'), ('hello','kitty')]
    
  3. ==============================

    3.OrderedDict () 사용, 버전 2.7부터 사용 가능

    OrderedDict () 사용, 버전 2.7부터 사용 가능

    호기심에 불과합니다.

    from collections import OrderedDict
    a = {}
    b = OrderedDict()
    c = OredredDict()
    
    a['key1'] = 'value1'
    a['key2'] = 'value2'
    
    b['key1'] = 'value1'
    b['key2'] = 'value2'
    
    c['key2'] = 'value2'
    c['key1'] = 'value1'
    
    print a == b #True
    print a == c #True
    print b == c #False
    
  4. ==============================

    4.또는 키를 튜플의 첫 번째 필드로 time.now ()와 함께 터플링합니다.

    또는 키를 튜플의 첫 번째 필드로 time.now ()와 함께 터플링합니다.

    그런 다음 dictname.keys (), sort 및 voila를 사용하여 키를 검색 할 수 있습니다!

    독일 사람

  5. ==============================

    5.기본 dict 클래스에서는이를 수행 할 수 없습니다.이 클래스는 해시순으로 정렬됩니다. 당신은 정말로 키, 값 쌍 또는 somesuch의 목록입니다 주문할 수있는 자신의 사전을 구축 할 수 있습니다.

    기본 dict 클래스에서는이를 수행 할 수 없습니다.이 클래스는 해시순으로 정렬됩니다. 당신은 정말로 키, 값 쌍 또는 somesuch의 목록입니다 주문할 수있는 자신의 사전을 구축 할 수 있습니다.

  6. ==============================

    6.StableDict를 사용하여 좋은 결과를 얻었습니다.

    StableDict를 사용하여 좋은 결과를 얻었습니다.

    http://pypi.python.org/pypi/StableDict/0.2

  7. ==============================

    7.또는 pythonutils의 odict 모듈처럼 여기에 설명 된 PEP-372 구현을 사용하십시오.

    또는 pythonutils의 odict 모듈처럼 여기에 설명 된 PEP-372 구현을 사용하십시오.

    pocoo.org 구현을 성공적으로 사용 했으므로,

    my_dict={}
    my_dict["foo"]="bar"
    

    my_dict=odict.odict()
    my_dict["foo"]="bar"
    

    이 파일 만 필요합니다.

  8. ==============================

    8.나중에 참조 할 수 있도록 키를 별도의 목록에 저장하지 않으면 불가능합니다.

    나중에 참조 할 수 있도록 키를 별도의 목록에 저장하지 않으면 불가능합니다.

  9. ==============================

    9.당신이 할 수있는 것은 입력 된 순서를 나타내는 키와 함께 값을 삽입 한 다음 항목들에 대해 sorted ()를 호출하는 것입니다.

    당신이 할 수있는 것은 입력 된 순서를 나타내는 키와 함께 값을 삽입 한 다음 항목들에 대해 sorted ()를 호출하는 것입니다.

    >>> obj = {}
    >>> obj[1] = 'Bob'
    >>> obj[2] = 'Sally'
    >>> obj[3] = 'Joe'
    >>> for k, v in sorted(obj.items()):
    ...     print v
    ... 
    Bob
    Sally
    Joe
    >>> 
    
  10. ==============================

    10.dict 기능이 필요없고 삽입 한 순서로 튜플을 반환하기 만하면 큐가 더 잘 작동하지 않을까요?

    dict 기능이 필요없고 삽입 한 순서로 튜플을 반환하기 만하면 큐가 더 잘 작동하지 않을까요?

  11. ==============================

    11.Python 3.7부터 표준 dict는 삽입 순서를 유지합니다. 문서에서 :

    Python 3.7부터 표준 dict는 삽입 순서를 유지합니다. 문서에서 :

    따라서 사전을 정상적으로 반복하거나 popitem ()을 사용할 수 있어야합니다.

  12. from https://stackoverflow.com/questions/60848/how-do-you-retrieve-items-from-a-dictionary-in-the-order-that-theyre-inserted by cc-by-sa and MIT license