web-dev-qa-db-ja.com

Python OrderedDictの最初の3つの要素をどのように取得しますか?

Python OrderedDictの最初の3つの要素をどのように取得しますか?

この辞書からデータを削除することも可能です。

例:Python OrderedDictの最初の3つの要素を取得し、残りの要素を削除するにはどうすればよいですか?

13
Michael Smith

簡単なOrderedDictを作成しましょう。

>>> from collections import OrderedDict
>>> od = OrderedDict(enumerate("abcdefg"))
>>> od
OrderedDict([(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g')])

最初の3つを返すにはkeysvaluesまたはitemsそれぞれ:

>>> list(od)[:3]
[0, 1, 2]
>>> list(od.values())[:3]
['a', 'b', 'c']
>>> list(od.items())[:3]
[(0, 'a'), (1, 'b'), (2, 'c')]

最初の3つのアイテムを除くすべてを削除するには:

>>> while len(od) > 3:
...     od.popitem()
... 
(6, 'g')
(5, 'f')
(4, 'e')
(3, 'd')
>>> od
OrderedDict([(0, 'a'), (1, 'b'), (2, 'c')])
23
Zero Piraeus

この反復法を使用して、作業を完了することができます。

x = 0
for i in ordered_dict:
    if x > 3:
        del ordered_dict[i]
    x += 1

まず、カウンター変数xを作成し、それを0に割り当てます。次に、ordered_dictのキーを循環します。 xが必要な値の数である3より大きいことを確認すると、チェックされたアイテムの数がわかります。 3つのアイテムがすでにチェックされている場合は、ordered_dictからそのアイテムをdeleteします。


これがよりクリーンな代替方法です(コメントのおかげで)

for i, k in enumerate(ordered_dict):
    if i > 2:
        del ordered_dict[k]

これは、列挙を使用して各キーに番号を割り当てることで機能します。次に、その数が2(0、1、または2)未満であるかどうかを確認します。番号が0、1​​、または2でない場合(これらは最初の3つの要素になります)、辞書内のその項目は削除されます。

3
michaelpri

それは他の口述と違いはありません:

d = OrderedDict({ x: x for x in range(10) })

i = d.iteritems()
a = next(i)
b = next(i)
c = next(i)

d = OrderedDict([a,b,c])
# or
d.clear()
d.update([a,b,c])
2