我有一个像这样的对象:
t = {'rand_key_1': ['x'], 'rand_key_2': [13,23], 'rand_key_3': [(1)], 'rk5': [1,100,3,4,3,3]}
Run Code Online (Sandbox Code Playgroud)
带有随机键(字符串和/或整数)的字典,其中ALL都有一个列表作为值,具有不同的大小.
我想把这个字典变成一个OrderedDict,它根据字典项列表的长度排序.所以订购后我想得到:
t_ordered = {'rk5': ..., 'rand_key_2': .., 'rand_key_1': .., 'rand_key_3': ..}
Run Code Online (Sandbox Code Playgroud)
(如果两个或多个项目具有相同的值,则它们的顺序并不重要.
我试过这个,但我失败了:
OrderedDict(sorted(d, key=lambda t: len(t[1])))
Run Code Online (Sandbox Code Playgroud)
我不是经验,如果我尝试的是超级愚蠢的话,请原谅我.
我能做什么?
谢谢.
我正在尝试按 C#Dictionary<int, int>的值排序,而不使用 LINQ OrderBy,因为 iPhone 不支持它。
我似乎无法弄清楚,所以非常感谢您的帮助!
OrderedDict在Python中如何记住元素的所有顺序?性能开销是多少?对于诸如实现之类的问题LRU,我发现它确实非常强大且易于实现,但是这里的性能提升是多少?如何记住最初插入的键的顺序?
它是否使用Dict()和Double Linked List来记住下图所示的键?如果您能用一种简单的语言传达信息而不是分享某种研究论文,我将不胜感激。
我的函数的返回值类型是OrderedDict,
现在我想在文件上写这个:
这是我的代码:
mainDict = OrderedDict([('a',1),('b',2),('c',3),('d',[4,5,6])])
with open(outFileName, 'w', encoding='utf-8') as outFile :
outFile.write(ujson.dumps(mainDict, indent=4))
Run Code Online (Sandbox Code Playgroud)
我希望它能保持文件中字典的顺序,但它混淆了.
是因为使用ujson.dumps?以及如何OrderedDict在输出文件中保留a的顺序?
所以,我有一个有序的字典,它有一堆键/值对。我可以使用 items() 方法提取所有它们。但是如果我只想选择其中的一些呢?
>>> import collections
>>> d = collections.OrderedDict({'banana': 3, 'apple': 4, 'pear': 1,'orange': 2})
>>> d.items()
[('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)]
Run Code Online (Sandbox Code Playgroud)
如果我只想要苹果和香蕉怎么办?
有没有办法可以指定我想要的键?
>>> d['apple','banana'] <-- does not work
Run Code Online (Sandbox Code Playgroud)
我正在考虑在最后使用列表理解来过滤结果,但看起来很混乱,我希望有更好的方法。
我正在尝试在交互式shell(IPython在我的情况下)中工作时从分析中实现漂亮的结果.这是某种映射,顺序对我来说很重要,所以我试图继承OrderedDict和覆盖__repr__方法,但这种方法不起作用.最低测试示例:
In[1]: from collections import OrderedDict
In[2]: class Result(OrderedDict):
def __repr__(self):
if self.keys():
report = []
for k, v in self.items():
report.append(k.ljust(10) + ': ' + repr(v))
return "\n".join(report)
else:
return self.__class__.__name__ + "()"
In[3]: res = Result()
res['all'] = 10
res['some'] = 11
res
Out[3]: Result([('all', 10), ('some', 11)])
Run Code Online (Sandbox Code Playgroud)
但是当我继承自dict(class Result(dict):)时,这种方法按预期工作,结果如下:
Out[3]: all : 10
some : 11
Run Code Online (Sandbox Code Playgroud)
但订单无法保证.我不知道,为什么第一种方法不起作用?
编辑:
Python 3.6.1
IPython 6.0.0
我正在阅读@Martijn Pieters对将dict转换为OrderedDict的回应.他的回答的主要观点是,通过一个普通的字典OrderedDict()将不会保留所需的顺序,因为你传递的字典已经"丢失"了任何相似的顺序.他的解决方案是传递组成dict的键/值对的元组.
但是,我在文档中也注意到以下内容:
在版本3.6中更改:接受PEP 468后,将保留传递给OrderedDict的关键字参数的顺序
这是否会使Martijn指出的问题无效(你现在可以将一个字典传递给OrderedDict),还是我误解了?
from collections import OrderedDict
ship = {'NAME': 'Albatross',
'HP':50,
'BLASTERS':13,
'THRUSTERS':18,
'PRICE':250}
print(ship) # order lost as expected
{'BLASTERS': 13, 'HP': 50, 'NAME': 'Albatross', 'PRICE': 250, 'THRUSTERS': 18}
print(OrderedDict(ship)) # order preserved even though a dict is passed?
OrderedDict([('NAME', 'Albatross'),
('HP', 50),
('BLASTERS', 13),
('THRUSTERS', 18),
('PRICE', 250)])
Run Code Online (Sandbox Code Playgroud)
如果我for key in ...在OrderedDict上运行一个循环,我得到同样的(正确的)顺序,似乎暗示可以传递dict本身.
编辑:这也引起了我的困惑:是否在Python 3.6+中订购了字典?
SortedListWithKey可以使用 lambda 函数对列表进行排序:
from sortedcontainers import SortedListWithKey
SortedListWithKey([[4, 'last'], [1, 'first']], key=lambda x: x[0])
# Result: SortedListWithKey([[1, 'first'], [4, 'last']], key=<function <lambda> at 0x107f5d730>)
Run Code Online (Sandbox Code Playgroud)
但是假设我需要使用set()只具有唯一值,文档说它还接受key=参数用于按自定义函数排序,但我无法让它工作:
from sortedcontainers import SortedSet
SortedSet([[4, 'last'], [1, 'first']], key=lambda x: x[0])
Run Code Online (Sandbox Code Playgroud)
会抛出以下异常:
values = set(chain(*iterables))
TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)
有办法实现这一点吗?
odict = OrderedDict([ ('dub', ['8084', 'command']),
('lhr',['8083','command']),
('ams',['8085','command']),])
df = pandas.DataFrame.from_dict(odict, orient='index')
print(df)
Run Code Online (Sandbox Code Playgroud)
我有上面的 OrderedDict 和命令来转换为数据帧。我希望字典中的键用作列中的数据而不是用作索引。打印出来是这样的。
0 1
dub 8084 command
lhr 8083 command
ams 8085 command
Run Code Online (Sandbox Code Playgroud)
不过,我希望它使用我认为所谓的 RangeIndex 来像这样打印。
0 1 2
0 dub 8084 command
1 lhr 8083 command
2 ams 8085 command
Run Code Online (Sandbox Code Playgroud) 我有这个清单
a = [OrderedDict([('a','b'), ('c','d'), ('e', OrderedDict([('a','b'), ('c','d') ]))])]
Run Code Online (Sandbox Code Playgroud)
我想在字典中转换 OrderedDict 。
你知道我该怎么办吗?
谢谢 !
python ×8
dictionary ×5
python-3.x ×3
sorting ×2
c# ×1
collections ×1
dataframe ×1
inheritance ×1
list ×1
lru ×1
ordereddict ×1
pandas ×1
python-2.7 ×1
python-3.6 ×1
ujson ×1