Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按值对Python字典排序-这里有什么问题?_Python_Sorting_Dictionary - Fatal编程技术网

按值对Python字典排序-这里有什么问题?

按值对Python字典排序-这里有什么问题?,python,sorting,dictionary,Python,Sorting,Dictionary,考虑以下Python代码: with open('data.json', 'rb') as fp: data = json.load(fp,encoding="utf-8") list_of_years = [] for datas in data: list_of_years.append(data[datas]['year']) print set(list_of_years) received_letters = {} sent_letters = {} for years i

考虑以下Python代码:

with open('data.json', 'rb') as fp:
data = json.load(fp,encoding="utf-8")

list_of_years = []

for datas in data:
list_of_years.append(data[datas]['year'])

print set(list_of_years)

received_letters = {}

sent_letters = {}

for years in set(list_of_years):
print years
number_of_sent_letters =0
number_of_received_letters =0
for datas in data:
    if (data[datas]['year'] == years):
        if ' Luther, Martin' in data [datas] ['sender']:
            number_of_sent_letters+=1
print "The number of sent letters:" +str(number_of_sent_letters)
sent_letters[years]=number_of_sent_letters

for datas in data:
    if (data[datas]['year'] == years):
        if ' Luther, Martin' in data [datas] ['receiver']:
            number_of_received_letters+=1
print "The number of received letters:" +str(number_of_received_letters)
received_letters[years]=number_of_received_letters

sent_letters[years] = {number_of_sent_letters}
sorted_sent_letters[years] = sorted(sent_letters[years].iteritems(), key=operator.itemgetter(1))

received_letters[years] = {number_of_received_letters}
sorted_received_letters[years] = sorted(received_letters[years].iteritems(), key=operator.itemgetter(1))
我试图按照另一个关于按值对字典排序的问题的答案中的建议,对两个字典进行排序,分别是
收到的字母
发出的字母
。。。我得到的结果就是错误消息

set对象没有属性iteritems

关于最后一行的第四行


这里怎么了?

首先,您说您正在尝试对字典进行排序,但您的代码只尝试对包含单个项的集合进行排序

sent_letters[years] = {number_of_sent_letters}
sorted_sent_letters[years] = sorted(sent_letters[years].iteritems(), key=operator.itemgetter(1))
由于
number\u-of-sent\u-letters
是一个整数,
sent\u-letters[years]
只是一个单例集合

我想你想做:

sorted_sent_letters = sorted(sent_letters.iteritems(), key=operator.itemgetter(1))

你应该在循环之外做…

我很确定你想要的是这个,但我不清楚你想要做什么,因为你在最后生成的是两本字典,每年都与字母数量有关

with open('dataset.json', 'rb') as fp:
    dataset = json.load(fp, encoding="utf-8")

set_of_years = {}

for data in dataset:
    set_of_years.append(data['year'])

print set_of_years

sent_letters, received_letters = {}, {}

for year in set_of_years:

    print year

    for data in dataset:
        if (data['year'] == year):
            if 'Luther, Martin' in data['sender']:
                sent_letters[year]     += 1
            if 'Luther, Martin' in data['receiver']:
                received_letters[year] += 1

    print "The number of sent letters: %d" % sent_letters[year]
    print "The number of received letters: %d" % received_letters[year]
之后,这取决于你想要什么。您已将看起来像排序的内容编码为一个(日期,计数)元组列表,并按第二个值(计数)对其进行排序。如果写得好的话

itemgetter_1 = operator.itemgetter(1)
sorted_sent_letters     = sorted(sent_letters.items(),     key=itemgetter_1)
sorted_received_letters = sorted(received_letters.items(), key=itemgetter_1)
或者,使用lambdas

count_key = lambda pair: pair[1]
sorted_sent_letters     = sorted(sent_letters.items(),     key=count_key)
sorted_received_letters = sorted(received_letters.items(), key=count_key)
但似乎更可能的情况是,您只需要一份按字母计数排序的年份列表,因此您需要

count_key = lambda year: data[year]
sorted_sent_letters     = sorted(sent_letters,     key=count_key)
sorted_received_letters = sorted(received_letters, key=count_key)

我希望这能有所帮助

从表面上看,你的压痕是错误的。例如,第二行
data=json.load(fp,encoding=“utf-8”)
应该以空格开头,这样程序就不会编译。如果你有一个正确缩进的版本,那么请发布它,因为我们不能告诉你的意思比编译器更好!我还确信
data[datas]['year']
应该是
datas['year']
,这可能是您问题的根源。您从
打印集(年列表)
获得了什么输出?请修复代码缩进并提供错误的完整追溯。