Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.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_Dictionary - Fatal编程技术网

Python 在字典中的元组中排序元组?

Python 在字典中的元组中排序元组?,python,dictionary,Python,Dictionary,我被这个黑客问题困住了,我一直在练习这个问题,我似乎不知道如何在一个元组中对一个元组进行排序 例如,这是输入 2015-08, 2016-04 2015-08-15, clicks, 635 2016-03-24, app_installs, 683 2015-04-05, favorites, 763 2016-01-22, favorites, 788 2015-12-26, clicks, 525 2016-06-03, retweets, 101 2015-12-02, app_ins

我被这个黑客问题困住了,我一直在练习这个问题,我似乎不知道如何在一个元组中对一个元组进行排序

例如,这是输入

2015-08, 2016-04

2015-08-15, clicks, 635
2016-03-24, app_installs, 683
2015-04-05, favorites, 763
2016-01-22, favorites, 788
2015-12-26, clicks, 525
2016-06-03, retweets, 101
2015-12-02, app_installs, 982
2016-09-17, app_installs, 770
2015-11-07, impressions, 245
2016-10-16, impressions, 567
我应该得到的结果是

2016-03, app_installs, 683
2016-01, favorites, 788
2015-12, app_installs, 982, clicks, 525
2015-11, impressions, 245
2015-08, clicks, 635
但我得到的是

2016-03, app_installs, 683
2016-01, favorites, 788
2015-12, ('clicks', '525'), app_installs, 982
2015-11, impressions, 245
2015-08, clicks, 635
我的问题是写着2015-12的那句话。当有多个元组时,我很难按字母顺序排列

这是我的密码

# Enter your code here. Read input from STDIN. Print output to STDOUT
from datetime import date

line = input()

startDate = line.split(',')[0]
startYear, startMonth = startDate.split('-')
startDate = date(int(startYear), int(startMonth), 1)

endDate = line.split(' ')[1]
endYear, endMonth = endDate.split('-')
endDate = date(int(endYear), int(endMonth), 1)

line = input()

d = {}
while True:
    try:
        line = input()
        currentDate = date(int(line.split('-')[0]), int(line.split('-')[1].split('-')[0]), 1)

        if startDate <= currentDate < endDate:
            engagement = line.split(',')[1].strip()
            totalEngage = line.split(',')[2].strip()
            correctDate = "{}-{}".format(currentDate.year, str(currentDate.month).zfill(2))
            if not correctDate in d:
                d[correctDate] = engagement, totalEngage
            else:
                d[correctDate] = d[correctDate], engagement, totalEngage
    except:
        break

for key in reversed(sorted(d)):
    fin = "{}, {}".format(key, ', '.join(map(str, d[key])))
    print(fin)
#在此处输入您的代码。从标准输入读取输入。打印输出到标准输出
起始日期时间导入日期
行=输入()
startDate=line.split(',')[0]
startYear,startMonth=startDate.split('-'))
startDate=日期(整数(startYear),整数(startMonth),1)
endDate=行分割(“”)[1]
endYear,endMonth=endDate.split(“-”)
endDate=日期(int(endYear),int(endMonth),1)
行=输入()
d={}
尽管如此:
尝试:
行=输入()
currentDate=date(int(line.split('-')[0]),int(line.split('-')[1]。split('-')[0]),1)

如果startDate在解决对一级深嵌套元组排序的问题之前,我将向您展示一种更简单的方法来解决Hackerrank问题本身。
解决方案的问题在于此代码段

if not correctDate in d:
    d[correctDate] = engagement, totalEngage
else:
    d[correctDate] = d[correctDate], engagement, totalEngage
请注意,如果您在同一个月内获得n类型的分析,那么您编写的这段代码将生成n级别的深层嵌套元组。这是一个演示

>>> d = {}
>>> d["2015-12"] = "clicks", 525
>>> d["2015-12"] = d["2015-12"], "app_installs", 982
>>> d
{'2015-12': (('clicks', 525), 'app_installs', 982)}
>>> d["2015-12"] = d["2015-12"], "downloads", 100
>>> d
{'2015-12': ((('clicks', 525), 'app_installs', 982), 'downloads', 100)}
您可以使用列表存储同一月份的所有分析类型。用元组中的第一个元素作为键对列表进行排序要简单得多

初始化你的字典

d = collections.defaultdict(list)
用以下内容替换有问题的代码段-

d[correctDate].append( (engagement, totalEngage) )
最后,您可以显示按日期按逆时间顺序排序的输出,以及在各个日期内按字母顺序排序的输出

for key in reversed(sorted(d)):

    print("{}, {}".format(key,   ', '.join( [str(elem) for elem in sorted(a, key=lambda x: x[0])])))
现在,我们来讨论排序一个一级深嵌套元组的问题。您将不得不以某种方式展平嵌套的元组以对它们进行排序。或者您可以将元组中的所有元素置于同一级别。
一个非常笨拙的方法是-


同样,请注意,使用嵌套元组是解决此问题的一种不必要的复杂方法。但如果您坚持使用它,您可以使用递归对任意级别的深层嵌套元组进行排序

在解决排序一级深嵌套元组的问题之前,我将向您展示一种更简单的方法来解决Hackerrank问题本身。
解决方案的问题在于此代码段

if not correctDate in d:
    d[correctDate] = engagement, totalEngage
else:
    d[correctDate] = d[correctDate], engagement, totalEngage
请注意,如果您在同一个月内获得n类型的分析,那么您编写的这段代码将生成n级别的深层嵌套元组。这是一个演示

>>> d = {}
>>> d["2015-12"] = "clicks", 525
>>> d["2015-12"] = d["2015-12"], "app_installs", 982
>>> d
{'2015-12': (('clicks', 525), 'app_installs', 982)}
>>> d["2015-12"] = d["2015-12"], "downloads", 100
>>> d
{'2015-12': ((('clicks', 525), 'app_installs', 982), 'downloads', 100)}
您可以使用列表存储同一月份的所有分析类型。用元组中的第一个元素作为键对列表进行排序要简单得多

初始化你的字典

d = collections.defaultdict(list)
用以下内容替换有问题的代码段-

d[correctDate].append( (engagement, totalEngage) )
最后,您可以显示按日期按逆时间顺序排序的输出,以及在各个日期内按字母顺序排序的输出

for key in reversed(sorted(d)):

    print("{}, {}".format(key,   ', '.join( [str(elem) for elem in sorted(a, key=lambda x: x[0])])))
现在,我们来讨论排序一个一级深嵌套元组的问题。您将不得不以某种方式展平嵌套的元组以对它们进行排序。或者您可以将元组中的所有元素置于同一级别。
一个非常笨拙的方法是-


同样,请注意,使用嵌套元组是解决此问题的一种不必要的复杂方法。但如果您坚持使用它,您可以使用递归对任意级别的深层嵌套元组进行排序

天哪。你的第一个方法很有道理。谢谢大家!@SortStuff成功提交解决方案时,请务必查看得分最高者提交的解决方案。这就是你学习这些漂亮把戏的方法。天哪。你的第一个方法很有道理。谢谢大家!@SortStuff成功提交解决方案时,请务必查看得分最高者提交的解决方案。这就是你将如何学习这些漂亮的技巧。