标签: ordereddictionary

Python:OrderedDictionary基于键值的长度排序

我有一个像这样的对象:

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)

我不是经验,如果我尝试的是超级愚蠢的话,请原谅我.

我能做什么?

谢谢.

python sorting dictionary ordereddictionary python-2.7

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

不使用 Linq OrderBy 订购字典

我正在尝试按 C#Dictionary<int, int>的值排序,而不使用 LINQ OrderBy,因为 iPhone 不支持它。

我似乎无法弄清楚,所以非常感谢您的帮助!

c# dictionary ordereddictionary

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

Python的OrderedDict如何记住插入的元素?

OrderedDict在Python中如何记住元素的所有顺序?性能开销是多少?对于诸如实现之类的问题LRU,我发现它确实非常强大且易于实现,但是这里的性能提升是多少?如何记住最初插入的键的顺序?

它是否使用Dict()Double Linked List来记住下图所示的键?如果您能用一种简单的语言传达信息而不是分享某种研究论文,我将不胜感激。

在此处输入图片说明

python collections dictionary ordereddictionary lru

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

我想用ujson保持OrderedDict的顺序

我的函数的返回值类型是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的顺序?

python ordereddictionary ujson

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

来自ordereddict的子集字段?

所以,我有一个有序的字典,它有一堆键/值对。我可以使用 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)

我正在考虑在最后使用列表理解来过滤结果,但看起来很混乱,我希望有更好的方法。

python ordereddictionary

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

如何从OrderedDict继承时覆盖__repr__?

我正在尝试在交互式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

python inheritance ordereddictionary

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

将字典传递给OrderedDict有什么问题?

我正在阅读@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+中订购了字典?

python dictionary ordereddictionary python-3.x python-3.6

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

如何在Python的sortedcontainers中正确使用SortedSets by key

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)

有办法实现这一点吗?

python sorting list ordereddictionary sortedcontainers

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

使用 pandas from_dict 转换为数据帧时,不要使用字典中的键作为索引

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)

ordereddictionary dataframe python-3.x pandas

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

如何将 OrderedDict 转换为 Dict

我有这个清单

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

我想在字典中转换 OrderedDict 。

你知道我该怎么办吗?

谢谢 !

python dictionary ordereddictionary python-3.x ordereddict

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