【问题标题】:Convert a list of strings to a list of single-element sets将字符串列表转换为单元素集列表
【发布时间】:2024-01-19 04:52:01
【问题描述】:

我有以下列表

list_of_dict = [{'flat': ['103'], 'wing': u'C'}, {'flat': ['102', '104'], 'wing': u'B'}, {'flat': ['105'], 'wing': u'D'}]

我想转成

list_of_dict = [{'flat': [{'103'}], 'wing': u'C'}, {'flat': [{'102'}, {'104'}], 'wing': u'B'}, {'flat': [{'105'}], 'wing': u'D'}]

Flat 应该是包含在 '{ }' 中的数字列表

【问题讨论】:

  • 你不能自己循环一遍吗?
  • 包含在{} 中的意思是它们应该是单例集?

标签: python list dictionary set


【解决方案1】:

假设您想要单元素集列表,您可以使用for 循环:

for d in list_of_dict:
     if 'flat' in d:
         d['flat'] = list(map(lambda x: set([x]), d['flat']))

if 勾选此处提供了更高级别的安全性,以防您的字典不包含 flat 作为密钥。或者,使用 EAFP 方法,您可以使用 try-except 大括号:

for d in list_of_dict:
     try:
         d['flat'] = list(map(lambda x: set([x]), d['flat']))
     except KeyError: 
         pass

>>> list_of_dict
[{'flat': [{'103'}], 'wing': 'C'},
 {'flat': [{'102'}, {'104'}], 'wing': 'B'},
 {'flat': [{'105'}], 'wing': 'D'}]

【讨论】:

    【解决方案2】:

    以下内容正是您想要的,

    list_of_dict = [{'flat': ['103'], 'wing': u'C'}, {'flat': ['102', '104'], 'wing': u'B'}, {'flat': ['105'], 'wing': u'D'}]
    
    for e in list_of_dict:
        e['flat'] = [{x} for x in e['flat']]
    
    print(list_of_dict)
    

    更新: 以下代码应根据您在下面的评论工作,

    list_of_dict = [{'flat': ['103'], 'wing': u'C'}, {'flat': ['102', '104'], 'wing': u'B'}, {'flat': ['105'], 'wing': u'D'}]
    
    for e in list_of_dict:
        e['flat'] = ['{'+x+'}' for x in e['flat']]
    
    print(list_of_dict)
    

    【讨论】:

    • 谢谢你的回复,但我不想被设置,我需要它的字符串列表['{102}'],目前是[set(['103'])跨度>
    • 查看上面的更新,它现在创建了一个包含 {} 的字符串列表
    【解决方案3】:

    {} 表示set。假设这是您想要的,您可以这样做:

    for x in list_of_dict:
        x['flat'] = Set(x['flat'])
    

    这会将list_of_dict 编辑为此:

    [{'flat': Set(['103']), 'wing': u'C'}, {'flat': Set(['102', '104']), 'wing': u'B'}, {'flat': Set(['105']), 'wing': u'D'}]
    

    如果您在 Python 解释器中输入 {'103'},它会返回:

    set(['103'])
    

    这就是我认为你需要套装的原因。

    【讨论】:

    • 什么是Set?.
    • 这不会按照要求制作单例集,而是将flat中的所有数字放在一起
    • A Set 是唯一元素的无序集合
    • @schwobaseggl 根据所需的输出,这就是 OP 要求的……还是不是?
    • OP 想要[{'102'}, {'104'}],而不是{'102', '104'}
    【解决方案4】:

    理解也能满足你的需要:

    list_of_dict = [{'flat': ['103'], 'wing': u'C'}, {'flat': ['102', '104'], 'wing': u'B'}, {'flat': ['105'], 'wing': u'D'}]
    result  = [{k: ['{}{}{}'.format('{',item,'}') for item in v] if k=='flat' else v for k, v in d.items()} for d in list_of_dict]
    #[{'flat': ['{103}'], 'wing': u'C'}, {'flat': ['{102}', '{104}'], 'wing': u'B'}, {'flat': ['{105}'], 'wing': u'D'}]
    

    【讨论】:

    • 谢谢你的回复,但我不想被设置,我需要它的字符串列表['{102}'],目前是[set(['103'])]
    最近更新 更多