【问题标题】:Append to value in dict if key exists / convert value to list then append如果键存在,则追加到字典中的值/将值转换为列表然后追加
【发布时间】:2020-03-09 18:07:28
【问题描述】:

我有一个所有子目录的列表,subdirectories

Oceans\
   Pacific_123\
      20140306\
      20131217\
   Atlantic_456\
      20101203\
      20160723\
      20140306\
   Indian_789\
      20110509\
>>> print(subdirectories)`
['/Oceans/Pacific_123/20140306', '/Oceans/Pacific_123/20140306', '/Oceans/Atlantic_456/20101203', '/Oceans/Atlantic_456/20160723', '/Oceans/Atlantic_456/20140306', '/Oceans/Indian_789/20110509']

我正在创建一个字典,marginal,其中subdirectories 列表的海洋或Oceans 的级别 1 是键,值是 ID,或级别 2。

我想要的marginal 应该是这样的:

>>> print(marginal)
{'123': ['20140306', '20131217'], '456': ['20101203', '20160723', '20140306'], '789': '20110509'}

我正在迭代 subdirectories 来创建这个字典。如果我的循环的前一次迭代中存在密钥,我如何创建第二个值/附加它?

>>> pairs = dict()
>>> for subdirectory in subdirectories:
    ...     pairs.update({subdirectory:subdirectory[20:]})

【问题讨论】:

  • 在你想要的输出中,你的意思是 '789' : 20110509 而不是 '789' : 'Arabian' ???
  • +DarrylG 是的,刚刚编辑过

标签: python list dictionary for-loop key-value


【解决方案1】:
subdirectories = ['/Oceans/Pacific_123/20140306', '/Oceans/Pacific_123/20140306', '/Oceans/Atlantic_456/20101203', '/Oceans/Atlantic_456/20160723', '/Oceans/Atlantic_456/20140306', '/Oceans/Indian_789/20110509']
marginal = {}
for s in subdirectories:
  prefix, delim, postfix = s.rpartition('/')
  _, _, key = prefix.rpartition('_')
  marginal.setdefault(key, []).append(postfix)

print(marginal)

结果

{'123': ['20140306', '20140306'], '456': ['20101203', '20160723', '20140306'], '789': ['20110509']}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-10
    • 2018-03-01
    • 2015-12-03
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 2018-06-22
    • 2021-01-07
    相关资源
    最近更新 更多