我试图删除一个键和值,OrderedDict但我使用时:
dictionary.popitem(key)
Run Code Online (Sandbox Code Playgroud)
即使提供了不同的密钥,它也会删除最后一个密钥和值.如果字典,是否可以删除中间的键?
如何通过索引从OrderedDictionary获取项的键和值?
由于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
从...开始
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'?
阅读如何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文档中.
我有一段代码按字母顺序排序.有没有办法在有序字典中选择第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)
怎么能实现这一目标?谢谢.
(类似于在有序指令中访问项目,但我只想输出键值对的值.)
寻找一种快速的方法,将pandas数据帧中的一行放入一个有序的dict中,而不使用list.列表很好,但是大数据集需要很长时间.我正在使用fiona GIS阅读器,并且行是有序的,并且模式给出了数据类型.我用pandas来加入数据.在很多情况下,行将具有不同的类型,所以我在考虑变成一个带有字符串类型的numpy数组可能会成功.
在我的代码中,我经常需要从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)
有没有更好的方法来完成这项工作?
在蒂姆彼得的答案中,"有没有理由不使用有序词典",他说
OrderedDict是dict的子类.
它的速度并不慢很多,但至少使用普通字典使内存翻倍.
现在,在经历一个特定的问题时,我尝试了一些样本检查,ipython并且两者都与之前的推理相矛盾:
dict与OrderedDict相同尺寸的OrderedDict周围7-8倍更多的时间花费容易不是在操作dict(因此慢了很多)有人可以向我解释我在推理中出错的地方吗?
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) 我试图从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 ×8
dictionary ×4
dataframe ×2
pandas ×2
python-2.7 ×2
python-3.x ×2
c# ×1
counter ×1
slice ×1