标签: ordereddictionary

从OrderedDict中删除键和值

我试图删除一个键和值,OrderedDict但我使用时:

dictionary.popitem(key)
Run Code Online (Sandbox Code Playgroud)

即使提供了不同的密钥,它也会删除最后一个密钥和值.如果字典,是否可以删除中间的键?

python dictionary ordereddictionary

25
推荐指数
2
解决办法
3万
查看次数

23
推荐指数
2
解决办法
2万
查看次数

如何在python OrderedDict上使用字符串键而不是整数进行切片?

由于OrderedDict具有列表(具有有序元素)和字典(使用键而不是索引)的特征,因此使用键切片似乎很自然.

>>> from collections import OrderedDict
>>> cities = OrderedDict((('san francisco', 650), ('new york', 212), ('shanghai', 8621), ('barcelona', 42423)))
>>> test['shanghai':]  # I want all the cities from shanghai to the end of the list
TypeError: unhashable type
Run Code Online (Sandbox Code Playgroud)

有趣的是,由于OrderedDictionary.__getslice__没有实施,这不是你看到的错误.我尝试添加自己的__getslice__方法OrderedDict,但我一直遇到这个TypeError问题.似乎Python正在进行某种类型检查以强制切片键只是整数,在它们传递给__getslice__函数之前,是多少unpythonic!

>>> class BetterOrderedDict(OrderedDict):
        def __getslice__(self, start=None, end=None, step=1):
            return 'potato'

>>> test = BetterOrderedDict((('one', 1), ('two', 2), ('three', 3), ('four', 4)))
>>> print test[1:4]
'potato'                           # ok this makes sense so …
Run Code Online (Sandbox Code Playgroud)

python dictionary ordereddictionary python-2.7 python-internals

21
推荐指数
2
解决办法
1499
查看次数

在不丢失订单的情况下更改OrderedDict中的密钥

从...开始

OrderedDict([('a', 1), ('c', 3), ('b', 2)])
Run Code Online (Sandbox Code Playgroud)

有可能最终结束

OrderedDict([('a', 1), ('__C__', 3), ('b', 2)])
Run Code Online (Sandbox Code Playgroud)

确保该'__C__'项目是在保持秩序之前'b'和之后'a'

python ordereddictionary

20
推荐指数
2
解决办法
8495
查看次数

订购柜台配方如何运作

阅读如何super()工作,我遇到了关于如何创建有序计数器的这个方法:

from collections import Counter, OrderedDict

class OrderedCounter(Counter, OrderedDict):
     'Counter that remembers the order elements are first seen'
     def __repr__(self):
         return '%s(%r)' % (self.__class__.__name__,
                            OrderedDict(self))
     def __reduce__(self):
         return self.__class__, (OrderedDict(self),)
Run Code Online (Sandbox Code Playgroud)

例如:

oc = OrderedCounter('adddddbracadabra')

print(oc)

OrderedCounter(OrderedDict([('a', 5), ('d', 6), ('b', 2), ('r', 2), ('c', 1)]))
Run Code Online (Sandbox Code Playgroud)

有人能够解释这是如何神奇地起作用的吗?

这也出现在Python文档中.

python counter dictionary ordereddictionary python-3.x

20
推荐指数
1
解决办法
7457
查看次数

Python在OrderedDict中选择第i个元素

我有一段代码按字母顺序排序.有没有办法在有序字典中选择第i个键并返回其相应的值?即

import collections
initial = dict(a=1, b=2, c=2, d=1, e=3)
ordered_dict = collections.OrderedDict(sorted(initial.items(), key=lambda t: t[0]))
print(ordered_dict)

OrderedDict([('a', 1), ('b', 2), ('c', 2), ('d', 1), ('e', 3)])
Run Code Online (Sandbox Code Playgroud)

我希望有一些功能......

select = int(input("Input dictionary index"))
#User inputs 2
#Program looks up the 2nd entry in ordered_dict (c in this case)
#And then returns the value of c (2 in this case)
Run Code Online (Sandbox Code Playgroud)

怎么能实现这一目标?谢谢.

(类似于在有序指令中访问项目,但我只想输出键值对的值.)

python ordereddictionary python-3.x

19
推荐指数
3
解决办法
1万
查看次数

如何快速将pandas数据帧行转换为ordereddict

寻找一种快速的方法,将pandas数据帧中的一行放入一个有序的dict中,而不使用list.列表很好,但是大数据集需要很长时间.我正在使用fiona GIS阅读器,并且行是有序的,并且模式给出了数据类型.我用pandas来加入数据.在很多情况下,行将具有不同的类型,所以我在考虑变成一个带有字符串类型的numpy数组可能会成功.

python ordereddictionary dataframe pandas

17
推荐指数
2
解决办法
9869
查看次数

切片Python OrderedDict

在我的代码中,我经常需要从Python OrderedDict(来自collections包)获取一系列键+值的子集.切片不起作用(抛出TypeError: unhashable type),替代,迭代,很麻烦:

from collections import OrderedDict

o = OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)])

# want to do:
# x = o[1:3]
# need to do:
x = OrderedDict()
for idx, key in enumerate(o):
    if 1 <= idx < 3:
        x[key] = o[key]
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来完成这项工作?

ordereddictionary slice python-2.7

16
推荐指数
3
解决办法
6705
查看次数

OrderedDict与Python中的Dict

蒂姆彼得的答案中,"有没有理由不使用有序词典",他说

OrderedDict是dict的子类.

它的速度并不慢很多,但至少使用普通字典使内存翻倍.

现在,在经历一个特定的问题时,我尝试了一些样本检查,ipython并且两者都与之前的推理相矛盾:

  1. dictOrderedDict相同尺寸的
  2. 上的操作OrderedDict周围7-8倍更多的时间花费容易不是在操作dict(因此慢了很多)

有人可以向我解释我在推理中出错的地方吗?


创建一个大型Dict和OrderedDict并比较大小:

import sys
import random
from collections import OrderedDict

test_dict = {}
test_ordered_dict = OrderedDict()

for key in range(10000):
    test_dict[key] = random.random()
    test_ordered_dict[key] = random.random()

sys.getsizeof(test_dict)
786712

sys.getsizeof(test_ordered_dict)
786712
Run Code Online (Sandbox Code Playgroud)

使用以下方法检查插入所用的时间%timeit:

import sys
import random
from collections import OrderedDict

def operate_on_dict(r):
    test_dict = {}
    for key in range(r):
        test_dict[key] = random.random()

def operate_on_ordered_dict(r):
    test_ordered_dict = OrderedDict()
    for key …
Run Code Online (Sandbox Code Playgroud)

python dictionary ordereddictionary

15
推荐指数
1
解决办法
4839
查看次数

从ordereddict生成一个pandas数据帧?

我试图从ordereddict创建一个pandas数据帧,以保持值的顺序.但由于某些原因,在创建数据帧后,字段再次混乱.

这是orderdicts列表:

[OrderedDict([
  ('key_a',
  'value_a'),
  ('key_b',
  'value_b'),
]),
OrderedDict([
  ('key_a',
  'value_c'),
  ('key_b',
  'value_d'),
])
]
Run Code Online (Sandbox Code Playgroud)

现在我应该如何从这些创建一个pandas DataFrame?我正在寻找的是类似的东西(重要的是key_a和key_b等列名称顺序):

  key_a    key_b
0 value_a  value_b
1 value_c  value_d
Run Code Online (Sandbox Code Playgroud)

我试过了:

pd.DataFrame.from_records(orderedDictList)
pd.DataFrame.from_dict(orderedDictList)
Run Code Online (Sandbox Code Playgroud)

随意提出任何其他问题.

python ordereddictionary dataframe pandas

14
推荐指数
2
解决办法
2万
查看次数