【问题标题】:Sorting large list by number of days printed按打印天数对大列表进行排序
【发布时间】:2017-03-30 02:11:42
【问题描述】:

在我的 CSC 课程中,我们必须从 .txt 文件中的数字和一周中的参考日期组成一个列表。我可以将所有数字转换为天数,但我无法计算出每天打印多少次,它的打印形式是

Thursday
Friday
Monday
Thursday

我需要它打印出来

 Thursday = 6
 Friday = 11
 Saturday = 3

整个列表都是这样,有什么想法吗? 这是我的代码

def dayofmurder(date):
date = date%10000
month = date//100
date= date %100
day=date
monthlist = [0,31,59,90,120,151,181,212,243,273,304,334]
daysofweek = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]
startonday = 4
startonday = monthlist[month-1]+(day-1)+startonday
startonday %= 7
return daysofweek[startonday]


file = open("C:\\Users\\bh1337\\Documents\\2015HomicideLog_FINAL.txt" , "r")
lines=file.readlines()[1:]
file.close()
for line in lines:
    value=line.split()


listdays=(dayofmurder(int(value[0])))
print(listdays)

.TXT 文件

Date   Event #  TIME    Victim Name     V R/G   V Age
150101 0685 2:03    Anderson, Kedral    BM  26
150103 0816 5:57    Shines, Kathryn     WF  54
150106 4417 22:06   Norton, Noella      HF  46
150107 4655 23:27   Speidel, Steven     WM  41
150110 1100 8:35    Orozco, Jose        HM  53
140813 2059 14:53   Liu, Kim Chunng     AF  74
150112 3425 18:40   Primm, Rodney       BM  43
150115 3106 16:59   Lee, Wonjae     AM  26
150209 4737 23:35   Espinoza, Jose      HM  44
150213 2904 16:48   Eaddy, Obiche       BM  35
150214 3550 18:31   Solis, Rodolfo      HM  46
150212 4633 23:22   Meyers, Tammy       WF  43
150215 3763 21:26   Leyton, Jim     HM  16
150216 0575 4:46    Orozco, Miguel      HM  32
150222 1276 9:14    Ramos, Pedro        HM  38
150303 4149 22:13   Caldwell, Veronica  HF  33
150303 4149 22:13   Reyes, Yvonne       HF  18
150303 4149 22:13   Childers, Cory      BM  21
150311 4394 22:34   Lewis, Androples    BM  31
150317 0152 1:00    Remer, Jason        WM  28
150324 0352 2:24    Turner, Edward      WM  47
150325 3470 18:03   Vasquez, Carlos     HM  45
150403 3985 20:52   Sims, Angela        WF  45
150404 3427 17:55   Chism, Kendrick     BM  01
150404 3427 17:55   Braxton, Jermiaia   BF  03
150410 3797 20:31   Cooper, Derek       BM  28
150417 4546 22:17   Cassidy, Cassandra  WF  24
150419 2536 14:29   Thomas, Lakeitha    BF  26
150419 2536 14:29   Ball, Legatha       BF  28
150422 0275 2:10    Stepien, Gail       WF  51
150429 4435 21:26   Bugarin, Carlos     HM  31
150502 2397 12:47   Chavez, Norma       HF  47
150503 1040 4:21    Hawkins, DaShawn    BM  29
150505 2132 12:17   McQuade, Christine  WF  63
150506 1150 8:22    Fensch, Fred        WM  87
150507 1243 8:55    Banova, Giancarlo   WM  60
150507 3650 17:38   Cravish, Gary       WM  62
150507 3650 17:38   Cravish, Bonny      WF  56
150509 2883 15:49   Zarwood, Nickey     BM  24
150510 0867 3:44    Cain, Epri      BF  32
150511 2374 14:14   Collins, Jonathan   WM  39
150512 4618 21:38   Washington, Reginald    BM  55
150514 4411 22:58   Gutierrez, Christian    HM  24
150516 0122 0:36    Huff, Zachary       WM  21
150521 3549 17:56   Gonzales, Marissa   BF  25
150525 0476 2:29    Hernandez, Enrique  HM  43
150525 1045 7:11    Suri, Rahmond       BM  31
150529 4978 23:48   Najera, Richard     HM  24
150526 0748 5:09    Carrillo, Israel    HM  12
150607 2089 12:46   Martinez, Aaron     HM  22
150612 3929 20:25   Zimmerman, Jeremy   WM  45
150614 3397 18:39   Hanson, Allen       WM  57
150609 3705 11:02   Carter, Larry       BM  54
150624 1325 9:37    Carraway, Raytwan   BM  27
150624 1325 9:37    Jones, Rabon Terrance   BM  27
150627 4469 23:06   Keyes, Demario      BM  38
150630 1261 9:03    Pro, Willie     BM  33
150701 2518 13:23   Russell, Gregory    WM  49
150718 4524 22:49   Santillano, Daniel  HM  29
150619 0816 6:57    Carlisle, William   WM  78
150721 0981 7:52    Johnson, Charles    BM  38
150727 0692 5:12    Hall, Richard       WM  64
150729 1824 11:55   Luebeck, Mary       WF  84
150713 0462 2:54    Gravely Jerome      BM  38
150802 4168 22:20   Sanchez, Joel       HM  31
150731 3326 18:30   Flores-Guevara, Rene    HM  35
150805 3825 20:20   Jones, Josie        WF  36
150805 4087 21:26   Wright, Shakem      BM  19
150806 2182 13:26   Degroat, Chad       WM  37
150810 0762 6:00    Fritz, David        WM  52
150810 3440 18:50   Klungseth, Clayton  WM  31
150811 0608 5:07    Villafana-Ibarria, Luis HM  30
150811 0608 5:07    Avila-Estrada, Fernando HM  31
150813 2019 12:22   Dinunzio, Francine  WF  62
150815 3018 16:29   Garcia, Jairo       HM  28
150817 0122 0:46    Reyes, Hipolito     HM  32
150819 0234 1:42    Wales, John     WM  51
150819 1430 10:41   Elliot, Eugene      WM  72
150820 3080 17:25   Shilgevorkyan, Avetis   WM  57
150823 2957 17:38   Medrano, Steve      HM  35
150827 4688 22:37   Lamb, Jerelle       BM  30
150831 3292 18:21   Tipton, Todd        WM  50
150902 4458 22:59   Doe, Jane       WF  51
150420 0751 6:31    Hall, Marrie        BF  42
150905 0542 2:39    Garcia, Geovany     HM  17
150907 0008 0:02    Spiller, Iris       BF  35
150808 3317 18:09   Vance, Lisa     WF  47
150911 1672 12:20   Anderson, Aaron     BM  25
150911 1672 12:20   Bullard, Alton      BM  32
150914 3205 19:33   Zepeda, Joey        HM  23
150915 0293 2:23    Gibson, Kelvin      BM  27
150917 3346 20:50   Ortiz-Hernandez, Javier HM  34
150921 2138 14:09   Humphrey, Michael   WM  51
150922 0146 1:04    Patterson, Derrick  BM  46
150922 2008 13:15   Sanchez, Young      AF  71
150926 1368 9:20    Prather, Anthony    BM  41
150923 3894 19:53   Northcott, James    WM  72
151029 3502 19:48   Martorano, Paul     HM  43
151002 0896 7:09    Baglely, Jennifer   WF  39        
151002 0896 7:09    Donoso, Lex     WM  08           
151003 1599 10:33   Harvey, Chad        WM  38
151005 3001 17:07   Gonzalez, Gabriela  HF  41
151017 3670 20:27   Munns, Tony     BM  28
151023 0962 8:20    Green, Elizabeth    BF  48
151026 3840 21:30   Taylor-Mills, Tiyvone   BM  16
151028 3176 17:53   Schneider, Kristopher   WM  33
150712 2524 15:21   Schneider, Rita     WF  79
151112 1395 10:21   Houston, Michael    BM  37
151115 1607 23:50   Doe, John       BM  00  
151116 1716 12:25   Jimenez, Mario      HM  45
151116 3239 19:20   Colbert, Jamel      BM  32
151116 3239 19:20   Robinson, Shelby    WF  21  
151118 2319 14:04   Flores, Jimmy       HM  60
151118 3155 17:47   O'Neil, John        WM  52
151119 2682 16:16   Brown, William      BM  44
151120 3702 20:40   Butler, Terrance    BM  38
151121 1922 13:43   Nunez, Alexander    HM  35
151123 3284 18:52   Taylor, Dwayne      BM  39
151126 0471 4:13    Bankey, Henry       WM  58
151202 4480 22:31   Batts, David        BM  39
151205 1488 10:32   Larry, Dorothy      BF  69
151207 3187 17:50   Young, Morty        BM  37
151207 3187 17:50   Young, Charlita Lasunda BF  35
151207 3187 17:50   Leggett, Deandre    BM  38
151209 1586 10:15   Ryan, Camron        WM  27
151210 0594 5:01    Andebrehan, Yonas   BM  25
151216 1903 12:22   Johnson, Kyth       BM  27
151216 3487 19:14   Clay, Veronica      BF  46
151219 0833 6:50    Galvez-Valle, Jesse HM  38
151220 2947 18:37   Valenxula, Jessica  HF  32
151223 0572 4:59    McGee, Richard      WM  31
151223 1525 11:16   Adams, Marquice     BM  17
151223 2640 16:28   Kaname, Gary        HM  45
151224 3343 22:13   Cordova, David      HM  49

【问题讨论】:

    标签: python list count


    【解决方案1】:

    如果我理解正确,我会这样做:

    from datetime import datetime
    
    daysofweek = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
    
    with open('test.txt','r') as f:
        lines=f.readlines()[1:]
    
    count = {}
    for line in lines:
        value=line.split()
        date = datetime.strptime(value[0], '%y%m%d')
        day = daysofweek[date.weekday()]
        count[day] = count.get(day, 0) + 1
    
    print(count)  
    

    【讨论】:

    • 也许你的文件最后一行是空白的,所以什么都不能分割?
    • 这是文件中的空格!非常感谢!!
    • 有谁知道如何让它按日期顺序排列,M,T,W,Th,F,S,Su?
    • 试试:for i in daysofweek: print(i, count[i])
    【解决方案2】:

    使用字典来跟踪您的日子。由于dayofmurder() 返回特定日期,您可以使用字典来跟踪特定日期返回的次数,如下所示。

    def dayofmurder(date):
        date = date%10000
        month = date//100
        date= date %100
        day=date
        monthlist = [0,31,59,90,120,151,181,212,243,273,304,334]
        daysofweek = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]
        startonday = 4
        startonday = monthlist[month-1]+(day-1)+startonday
        startonday %= 7
        return daysofweek[startonday]
    
    
    file = open("input.txt" , "r")
    lines=file.readlines()[1:]
    file.close()
    dayOfmurders = {"Sunday": 0 ,"Monday": 0,"Tuesday": 0,"Wednesday": 0,"Thursday":0, "Friday": 0,"Saturday": 0}
    for line in lines:
        value=line.split()
        listdays=(dayofmurder(int(value[0])))
        dayOfmurders[listdays] = dayOfmurders[listdays] + 1;
    
    for k, v in dayOfmurders.items():
        print(k, '=', v)
    

    这是你的输出

    Sunday = 13
    Wednesday = 26
    Saturday = 19
    Tuesday = 17
    Friday = 14
    Monday = 25
    Thursday = 20
    

    【讨论】:

    • 我复制了您上面粘贴的文件样本,这就是我使用的。我没有看到索引错误。 k 代表键,v 代表值字典有一个键和值配对在一起。
    • 很高兴,我能帮上忙。
    • 你知道如何在工作日按顺序排列吗?周日 =13 周一 =26 周二 = 17
    • 你可以在你的函数之外创建你daysofweek = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],然后在你的循环中使用它来打印你的输出像这样for v in daysofweek: print(v, "=", dayOfmurders[v])
    • 或者你可以研究如何实现集合 OrderedDic。在这里查看答案:stackoverflow.com/questions/4642501/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 2018-01-11
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 2021-02-07
    相关资源
    最近更新 更多