【问题标题】:Add a Year to each item in list or Dictionary为列表或字典中的每个项目添加年份
【发布时间】:2013-03-30 13:12:26
【问题描述】:

这个问题可能微不足道。如何在不创建长 HUGE 年列表的情况下,将 1903 年以 2009 年结束的年份添加到列表中的 106 项 但是绕过一年?

例如:

  States : Boston Americans, World Series Not Played in 1904, New York,  
           Chicago, Chicago, Chicago
           Pittsburgh, Philadelphia, Philadelphia,
           Boston, Philadelphia, Boston, Boston,Boston]`

到这里:

  States : [Boston Americans:1903], [World Series Not Played:1904], [New York:1905],  
           [Chicago:1906],[Chicago:1907:],[Chicago:1908]....ect

虽然我知道您可以为列表中的每个项目添加一个数字计数

 d = defaultdict(int)
 for word in words.split():
     d[word] += 1

我试过了:

 d = {}
 for i in new_list:
     d[1903 + i] += 1 # I know this looks crazy but this is all I have
     print(d)

我明白了

TypeError: 'function' object is not iterable

但这对我来说是新的。我通常会有更多展示,但我真的没有任何想法 如何对此进行编码。

【问题讨论】:

  • 哎呀,让我改变一下。
  • 唯一棘手的地方是删除“in YYYY”部分。它们是否都具有相同的格式,即以“in YYYY”结尾,或者类似于“1994--Canceled due to Strike”?
  • 此时它并不像年份那么重要。感谢您的意见。

标签: python dictionary count add


【解决方案1】:

如果您有获奖者名单,例如:

>>> winners
['Boston Americans', 'World Series Not Played in 1904', 'New York', 'Chicago', 'Chicago', 'Chicago', 'Pittsburgh', 'Philadelphia', 'Philadelphia', 'Boston', 'Philadelphia', 'Boston', 'Boston', 'Boston']

您可以使用enumerate 将这些与数字相关联:

>>> list(enumerate(winners, 1903))
[(1903, 'Boston Americans'), (1904, 'World Series Not Played in 1904'), (1905, 'New York'), (1906, 'Chicago'), (1907, 'Chicago'), (1908, 'Chicago'), (1909, 'Pittsburgh'), (1910, 'Philadelphia'), (1911, 'Philadelphia'), (1912, 'Boston'), (1913, 'Philadelphia'), (1914, 'Boston'), (1915, 'Boston'), (1916, 'Boston')]

你可以从中创建一个字典,或者一个字符串列表,或者其他任何东西:

>>> dict(enumerate(winners, 1903))
{1903: 'Boston Americans', 1904: 'World Series Not Played in 1904', 1905: 'New York', 1906: 'Chicago', 1907: 'Chicago', 1908: 'Chicago', 1909: 'Pittsburgh', 1910: 'Philadelphia', 1911: 'Philadelphia', 1912: 'Boston', 1913: 'Philadelphia', 1914: 'Boston', 1915: 'Boston', 1916: 'Boston'}
>>> ['{}:{}'.format(winner, year) for year, winner in enumerate(winners, 1903)]
['Boston Americans:1903', 'World Series Not Played in 1904:1904', 'New York:1905', 'Chicago:1906', 'Chicago:1907', 'Chicago:1908', 'Pittsburgh:1909', 'Philadelphia:1910', 'Philadelphia:1911', 'Boston:1912', 'Philadelphia:1913', 'Boston:1914', 'Boston:1915', 'Boston:1916']

您可以很容易地去掉“in YYYY”部分,但最好的方法取决于短语的可变性。

例如,如果您知道它是in YYYY,那么您可以使用类似

def strip_year(winner, year):
    in_year = ' in {}'.format(year)
    if winner.endswith(in_year):
        winner = winner[:-len(in_year)]
    return winner

然后使用字典理解(python >= 2.7):

>>> {year: strip_year(winner, year) for year, winner in enumerate(winners, 1903)}
{1903: 'Boston Americans', 1904: 'World Series Not Played', 1905: 'New York', 1906: 'Chicago', 1907: 'Chicago', 1908: 'Chicago', 1909: 'Pittsburgh', 1910: 'Philadelphia', 1911: 'Philadelphia', 1912: 'Boston', 1913: 'Philadelphia', 1914: 'Boston', 1915: 'Boston', 1916: 'Boston'}

【讨论】:

    【解决方案2】:

    类似的东西:

    >>> a = ['a','b','c','d in 1906','e']
    >>> b = range(1903,1903+len(a))
    >>> b
    [1903, 1904, 1905, 1906, 1907]
    >>> zip(a,b)
    [('a', 1903), ('b', 1904), ('c', 1905), ('d in 1906', 1906), ('e', 1907)]
    >>> c = zip(a,b)
    >>> d = [(i[0][:-7],i[1]) if i[0].endswith(str(i[1])) else (i[0],i[1]) for i in c]
    >>> d
    [('a', 1903), ('b', 1904), ('c', 1905), ('d ', 1906), ('e', 1907)]
    

    之后您可以使用dict(d) 获取字典

    【讨论】:

      【解决方案3】:

      假设:

      my_dict = {"States" : ["Boston Americans", "World Series Not Played in 1904", "New York",  
                 "Chicago", "Chicago", "Chicago"
                 "Pittsburgh", "Philadelphia", "Philadelphia",
                 "Boston", "Philadelphia", "Boston", "Boston","Boston"]}
      

      那么就可以了:

      years = 1906
      for key in my_dict.keys():
        year_list = []
        for year in my_dict[key][0].split(","):
          if re.search(start,year):
            year_list.append(year)
          else:
            year_list.append(year + ":" + years)
          years += 1
        my_dict[key] = year_list
      

      【讨论】:

        【解决方案4】:

        使用 Python 的列表解析并定义一个辅助函数,将文本与尚不存在的年份连接起来。

        您可以使用enumerate 的可选第二个参数来指示开始 值——您的第一年。

        def add_year_to(state, year):
            year = str(year)
            return state if state.endswith(year) else ':'.join((state, year))
        
        
        states_with_years = [add_year_to(state, year) 
                             for year, state
                             in enumerate(states, 1903)]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-02-06
          • 1970-01-01
          • 1970-01-01
          • 2017-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多