我有python普通字典.在此,不保留插入顺序.我需要按插入顺序保留元素.我知道OrderedDict可以做这个工作.但是,我的问题是我需要从已经存在的普通字典中获取有序字典.这个字典无法更改.以下是我的普通词典:
d = {'tag': {'a': 1, 'c': {'k': 8}, 'b': 7, 'n': 6}}
Run Code Online (Sandbox Code Playgroud)
有没有办法在python中保持已经存在的字典中的元素顺序?任何帮助表示赞赏.使用python 2.7
这个循环的想法是迭代列表.如果对象的某个属性不是OrderedDict的键,则会添加它.它是对象列表的字典
for object in someList:
if object.DATE not in myOrderedDict:
myOrderedDict[object.DATE]=[]
myOrderedDict[object.DATE].append(object)
Run Code Online (Sandbox Code Playgroud)
虽然它似乎确实使OrderedDict大部分正确,但它在打印时最终会出现故障.而不是拥有类似的东西更像(01/13) (02/13) (03/13)是(02/13) (03/13) (01/13).
为什么会发生这种情况?如何解决?
我试图从嵌套的 OrderedDict 中找到给定键的值。
关键点:
我想在这个例子中返回名为“powerpoint_color”的键的值......
mydict= OrderedDict([('KYS_Q1AA_YouthSportsTrustSportParents_P',
OrderedDict([('KYS_Q1AA',
OrderedDict([('chart_layout', '3'),
('client_name', 'Sport Parents (Regrouped)'),
('sort_order', 'asending'),
('chart_type', 'pie'),
('powerpoint_color', 'blue'),
('crossbreak', 'Total')]))])),
Run Code Online (Sandbox Code Playgroud)
我最初的想法是做这样的事情:
print mydict[x][i]['powerpoint_color']
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
list indices must be integers, not str
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
我试图通过执行以下操作对以下OrderedDict进行排序 - >
>>> from collections import OrderedDict
>>> d = OrderedDict([(4995L, [{'isbn_13': u'9788131805923', 'book_quantity': 49L, 'seller_book_id': 4995L, 'book_id': 4995L, 'title': u'Industrial Automation and Robotics', 'selling_price': 292.0, 'id': 4995L, 'condition': 'New Book'}]), (6657L, [{'isbn_13': u'9788122425925', 'book_quantity': 49L, 'seller_book_id': 6657L, 'book_id': 6657L, 'title': u'A Textbook of Agricultural Statistics', 'selling_price': 243.0, 'id': 6657L, 'condition': 'New Book'}]), (6137L, [{'isbn_13': u'9788122425727\n', 'book_quantity': 50L, 'seller_book_id': 6137L, 'book_id': 6137L, 'title': u'A Guide to Corporate Governance', 'selling_price': 247.0, 'id': 6137L, 'condition': 'New Book'}]), (6260L, [{'isbn_13': u'9788122414394\n', 'book_quantity': …Run Code Online (Sandbox Code Playgroud) 我有一个没有扩展名的文件,这样的行(忽略行之间的间距,但每行是一个单独的行):
OrderedDict([('key1', u'value1'), ('key2', 'value2')])
OrderedDict([('key1', u'value1'), ('key2', 'value2')])
OrderedDict([('key1', u'value1'), ('key2', 'value2')])
Run Code Online (Sandbox Code Playgroud)
当我将它导入Python
snap_fh = open("C:\Users\.......")
for row in snap_fh:
print(type(row))
Run Code Online (Sandbox Code Playgroud)
行是"strings",我不能解析它OrderedDictionary
"OrderedDict([('key1', u'value1'), ('key2', 'value2'))])\n"
Run Code Online (Sandbox Code Playgroud)
如何将其导入为 OrderedDict
ast.literal_eval(row) 不工作 !
每当我尝试将json解析为OrderedDict时,它的结果顺序与json不同.我试试这样:
from collections import OrderedDict
data = OrderedDict(json.loads(resp.read().decode("utf-8")), object_pairs_hook=OrderedDict)
Run Code Online (Sandbox Code Playgroud)
我做错了什么,如果是的话,我该怎么做才能修复它,或者在python中它是不可能的?
我已经看到了类似的东西object_pairs_hook=collections.OrderedDict但是甚至没有正确执行.它无法解决参考.
我想以OrderedDict相反的顺序迭代.
即颠倒顺序:
for k, v in my_ordered_dict.iteritems():
# < do stuff >
Run Code Online (Sandbox Code Playgroud)
到目前为止,通过反转列表,我得到了一个非懒惰的版本:
for k, v in list(my_ordered_dict.iteritems())[::-1]:
# < do stuff >
Run Code Online (Sandbox Code Playgroud)
任何想法如何使它更好?
我有两个命令的字典D1和D2。我想要分配的键名D2到D1(覆盖现有的键名D1)。怎么做?
例:
D1 = {'first_key': 10, 'second_key': 20}
D2 = {'first_new_key': 123, 'second_new_key': 456}
Run Code Online (Sandbox Code Playgroud)
现在我想的键名分配D2到D1使D1成为
{'first_new_key': 10, 'second_new_key': 20}
Run Code Online (Sandbox Code Playgroud) 这是以下问题:
main_module.py
from collections import OrderedDict
from my_other_module import foo
a = OrderedDict([
('a', 1),
('b', 2),
('c', 3),
('d', 4),
])
foo(**a)
Run Code Online (Sandbox Code Playgroud)
my_other_module.py
def foo(**kwargs):
for k, v in kwargs.items():
print k, v
Run Code Online (Sandbox Code Playgroud)
当我运行时,main_module.py我希望按照我指定的顺序打印输出:
a 1
b 2
c 3
d 4
Run Code Online (Sandbox Code Playgroud)
但相反,我得到:
a 1
c 3
b 2
d 4
Run Code Online (Sandbox Code Playgroud)
我确实理解这与**操作符的实现方式有关,并且它以某种方式丢失了字典对传入的顺序.我也明白python中的字典不是按列表排序的,因为它们是作为哈希表实现的.是否有任何类型的"黑客"我可以应用,所以我得到了在这种情况下所需的行为?
PS - 在我的情况下,我无法对foo函数内的字典进行排序,因为除了传递值的严格顺序之外,没有可遵循的规则.
我想添加一个带有计数的键,并在每次增加时递增它,这是一个经典的操作.这是我的常规代码.
d = OrderedDict()
for i, v in enumerate(s):
if v not in d:
d[v] = 1
else:
d[v] += 1
Run Code Online (Sandbox Code Playgroud)
如何使用1行代码使用setdefault而不是collections. Counter
如果这是一个列表然后我可以做到,
d.setdefault(v, []).append()
有没有办法用整数加法做类似的事情.
python ×10
dictionary ×5
python-2.7 ×3
python-3.x ×2
counter ×1
django ×1
find ×1
get ×1
import ×1
key-value ×1
string ×1