字典转换为列表并排序导致错误[python2.7]

时间:2016-10-18 14:42:24

标签: python list python-2.7 dictionary

我有这样的字典:

  

{'11':6,'10':3,'15':2,'14':1,'04':3,'16':4,'19':1,'18':   1,'09':2,'17':2,'06':1,'07':1}

我希望根据键对字典进行排序,并生成如下内容:

  

('04',3),('06',1),('07',1),('09',2),('10',3),('11',6) ,   ('14',1),('15',2),('16',4),('17',2),('18',1),('19',1)

我尝试了hours = list(dict.items())并且效果很好,但是当我早些时候尝试时

for hour, freq in dict:
    count = (hour, freq)
    lst.append(count)
lst.sort()
print lst

我得到了

  

('0','4'),('0','6'),('0','7'),('0','9'),('1','0 '),('1',   '1'),('1','4'),('1','5'),('1','6'),('1','7'),('1', '8'),   ('1','9')

似乎只记录了小时的第一位数字,但我不知道为什么。当我计算给定字符串中字符的频率时,for循环运行良好。有人可以帮我解释一下吗?非常感谢。

5 个答案:

答案 0 :(得分:2)

执行_observers = CFBridgingRelease(CFArrayCreateMutable(NULL, 0, NULL)); 时,// Create variable to store all ObjectB objects. var allObjB = new List<ObjectB>(); // Add all children from each ObjectA. myList.ForEach(x => allObjB.AddRange(x.Children)); // and confirm that they are all in allObjB allObjB.ForEach(x => Console.WriteLine(x.ChildName)); 仅迭代字典中的键,而不是值。你没有得到for ... in d的元组,而是得到一个被分成dict的双字符字符串,而不是你问题的最后一个输出中的每个字符串实际上是分成元组的键。

答案 1 :(得分:2)

您可以尝试这样的事情:

d = {'11': 6, '10': 3, '15': 2, '14': 1, '04': 3, '16': 4, '19': 1, '18': 1, '09': 2, '17': 2, '06': 1, '07': 1}
l = list(d.iteritems())
l.sort()
print l

输出结果为:

[('04', 3), ('06', 1), ('07', 1), ('09', 2), ('10', 3), ('11', 6), ('14', 1), ('15', 2), ('16', 4), ('17', 2), ('18', 1), ('19',1)]

答案 2 :(得分:2)

您需要使用iteritems

for hour, value in dict.iteritems():
    etc.

当然,您不应该使用名称'dict' - 将其重命名为其他名称,因为它已经是dict类的名称。如果需要,您也可以使用items() - 它需要更多空间并且速度稍快但是如果您使用少量数据则无关紧要。

答案 3 :(得分:2)

我认为你只是迭代字典键而不是键和值对。

看看这篇文章: Iterating over dictionaries using 'for' loops

如果更新如下,您的代码应该有效:

for hour, freq in dict.iteritems():
    count = (hour, freq)
    lst.append(count)
lst.sort()

答案 4 :(得分:1)

使用a = {'11': 6, '10': 3, '15': 2, '14': 1, '04': 3, '16': 4, '19': 1, '18': 1, '09': 2, '17': 2, '06': 1, '07': 1} b = sorted([(x, y) for x, y in a.items()]) print(b) # prints # [('04', 3), ('06', 1), ('07', 1), ('09', 2), ('10', 3), ('11', 6), ('14', 1), ('15', 2), ('16', 4), ('17', 2), ('18', 1), ('19', 1)] 浏览两个键和值。将它与列表理解相结合,以获得您想要的列表,并最终对其进行排序。

{{1}}