普通字典和 OrderedDictonary 的语法差异
Difference in syntax of a normal dictionary and OrderedDictonary
打印普通字典的语法是
{'a': 1, 'c': 3, 'b': 2}
鉴于
打印 OrderedDict 的语法是
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
有什么方法可以print/return OrderedDict 的普通字典方式吗??
在您自己的 OrderedDict
class 中使用自定义 __str__
方法;在自定义方法中,你可以构建你想要的字符串:
from collections import OrderedDict
class MyOrderedDict(OrderedDict):
def __str__(self):
return "{%s}" % ", ".join([repr(k)+": "+str(v) for k, v in self.iteritems()])
d = MyOrderedDict([('a', 1), ('b', 2), ('c', 3)])
要以 dict
方式打印 OrderedDict
,您可以这样做(当然,如果打印的项目的实际顺序无关紧要):
def some_function():
d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}
od = OrderedDict(sorted(d.items(), key=lambda t: t[0]))
return od
my_ordered_dict_variable = some_function()
print('My Ordered Dicdict:', dict(my_ordered_dict_variable))
此代码将打印:
{'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}
简单的方法:
from collections import OrderedDict
a = {'a': 1, 'c': 3, 'b': 2}
new_dict = dict(OrderedDict(a))
print(new_dict)
print(type(new_dict))
输出:
{'a': 1, 'c': 3, 'b': 2}
<type 'dict'>
困难的方法:
您还可以使用 itertools
模块中的 groupby
将 OrderedDict return 转换为简单的字典,如下所示:
from collections import OrderedDict
from itertools import groupby
a = {'a': 1, 'c': 3, 'b': 2}
new_dict = {key:list(val)[0][1] for key, val in groupby(OrderedDict(a).items(), lambda x : x[0])}
print(new_dict)
print(type(new_dict))
输出:
{'c': 3, 'a': 1, 'b': 2`}
<type 'dict'>
编辑:
我看到有人反对,因为他们认为输出应该是有序字符串。所以,这是如何处理它的:
from collections import OrderedDict
a = {'a': 1, 'c': 3, 'b': 2}
new_dict = OrderedDict(a)
b = "{%s}" % ", ".join([str(key)+":"+str(val) for key, val in sorted(new_dict.iteritems())])
print(b)
print(type(b))
输出:
{'a':1, 'b':2, 'c':3}
<type 'str'>
打印普通字典的语法是
{'a': 1, 'c': 3, 'b': 2}
鉴于
打印 OrderedDict 的语法是
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
有什么方法可以print/return OrderedDict 的普通字典方式吗??
在您自己的 OrderedDict
class 中使用自定义 __str__
方法;在自定义方法中,你可以构建你想要的字符串:
from collections import OrderedDict
class MyOrderedDict(OrderedDict):
def __str__(self):
return "{%s}" % ", ".join([repr(k)+": "+str(v) for k, v in self.iteritems()])
d = MyOrderedDict([('a', 1), ('b', 2), ('c', 3)])
要以 dict
方式打印 OrderedDict
,您可以这样做(当然,如果打印的项目的实际顺序无关紧要):
def some_function():
d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}
od = OrderedDict(sorted(d.items(), key=lambda t: t[0]))
return od
my_ordered_dict_variable = some_function()
print('My Ordered Dicdict:', dict(my_ordered_dict_variable))
此代码将打印:
{'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}
简单的方法:
from collections import OrderedDict
a = {'a': 1, 'c': 3, 'b': 2}
new_dict = dict(OrderedDict(a))
print(new_dict)
print(type(new_dict))
输出:
{'a': 1, 'c': 3, 'b': 2}
<type 'dict'>
困难的方法:
您还可以使用 itertools
模块中的 groupby
将 OrderedDict return 转换为简单的字典,如下所示:
from collections import OrderedDict
from itertools import groupby
a = {'a': 1, 'c': 3, 'b': 2}
new_dict = {key:list(val)[0][1] for key, val in groupby(OrderedDict(a).items(), lambda x : x[0])}
print(new_dict)
print(type(new_dict))
输出:
{'c': 3, 'a': 1, 'b': 2`}
<type 'dict'>
编辑:
我看到有人反对,因为他们认为输出应该是有序字符串。所以,这是如何处理它的:
from collections import OrderedDict
a = {'a': 1, 'c': 3, 'b': 2}
new_dict = OrderedDict(a)
b = "{%s}" % ", ".join([str(key)+":"+str(val) for key, val in sorted(new_dict.iteritems())])
print(b)
print(type(b))
输出:
{'a':1, 'b':2, 'c':3}
<type 'str'>