Python 如何与dict一起使用join

Python 如何与dict一起使用join,python,dictionary,Python,Dictionary,我一直在做一个小项目,在那里我有一个计数器来检查一个字符是否达到一个特定的数字,然后它会根据给定的计数打印出来。如果它没有到达柜台,我们就把整张单子打印出来 我做过这样的事情: payload = {'40': None, '42': None, '44': '6', '43': '3', '46': None, '45': '7', '51': None, '48': None, '47': None, '39': None} characterCount, i = 0

我一直在做一个小项目,在那里我有一个计数器来检查一个字符是否达到一个特定的数字,然后它会根据给定的计数打印出来。如果它没有到达柜台,我们就把整张单子打印出来

我做过这样的事情:

payload = {'40': None, '42': None, '44': '6', '43': '3', '46': None, '45': '7', '51': None, '48': None, '47': None,
           '39': None}

characterCount, i = 0, 0
for j, item in enumerate(payload):

    if len(item) + characterCount > 5:
        print('\n'.join(payload[i:j]))
        characterCount, i = len(item), j
    else:
        characterCount += len(item)

if characterCount:
    print('\n'.join(payload[i:]))
我确实有两个问题

  • 当使用列表而不是dict时,这可能会很好地工作,但是是的,这不是我的选择,所以我想知道是否可以像我所做的那样通过调用索引来执行。我完全知道这会产生一个错误:
    TypeError:unhabable type:'slice'
    ,但我不知道是否有类似的方法,或者更好的方法

  • 此外,我还想打印键和值(仅当值有值时,如果它不包含任何值,则跳过打印

  • 这是可能的吗

    编辑:

    这就是我以前使用列表的方式,但是我当然需要更多的知识来存储key:value,而不是有两个列表来存储key和value(可能有更好的方法),但是我发现dict对我来说是一个更好的套件

    这是我以前的经历:

    payload = ['40', '42', '44', '43', '46', '45', '51', '48', '47', '39']
    
    characterCount, i = 0, 0
    for j, item in enumerate(payload):
    
        if len(item) + characterCount > 5:
            print("Inside the if statement")
            print('\n'.join(payload[i:j]))
            characterCount, i = len(item), j
        else:
            characterCount += len(item)
    
    if characterCount:
        print('\n'.join(payload[i:]))
    

    输出

    Inside the if statement
    40
    42
    Inside the if statement
    44
    43
    Inside the if statement
    46
    45
    Inside the if statement
    51
    48
    47
    39
    

    这就是我想做的,但用dicts来代替:)

    我不太明白这个程序的意义,但是如果我理解了你想正确地做什么,那么你可以使用一个带键值对的过滤字典,它有值(而不是无值)

    编辑,这里是一个更新版本,希望它更接近您所寻找的:

    payload = {'40': None, '42': None, '44': '6', '43': '3', '46': None, '45': '7', '51': None, '48': None, '47': None,
               '39': None}
    
    characterCount, i = 0, 0
    for j, item in enumerate(payload):
        if len(item) + characterCount > 5:
            selectedPayloads = ['{0} {1}'.format(k, payload[k]) for k in list(payload)[i:j] if payload[k] is not None]
            if len(selectedPayloads) != 0:
                print('\n'.join(selectedPayloads))
            characterCount, i = len(item), j
        else:
            characterCount += len(item)
    

    你的问题是,你正在使用dicts的切片。如果
    payload
    是一个dict,那么它应该做什么呢?@baduker不确定我在开始时是否不够清楚,正如我提到的,我做了一个小函数,在这里我进行字符计数,正如我们在这个代码
    if len(item)中看到的那样+characterCount>5:
    意味着如果项目和字符计数的长度大于5,那么我们希望打印出
    print('\n'.join(payload[i:j])
    ,这意味着在我们的情况下,它可能会从索引3开始,然后在索引5处停止,例如。但正如你所提到的,我们不能将切片与dicts一起使用,这是我的问题之一,正如我在下面的代码中提到的,我仍然没有得到你想要在这里做的事情。。。此外,使用
    enumerate
    和切片表示法
    [:]
    不是处理Python字典数据结构的方式@baduker重点是我想使用
    “\n.join(..)
    打印给定索引上的有效负载,但我知道这是不可能的,正如我所看到的,我在这里:(这就是为什么我要问的原因,因为我不知道如何像以前那样在dict中使用numerate和slice表示法。如果你想要一个带有列表的场景,我可以告诉你,这对我尝试做的事情更有意义吗?看,如果你想使用
    枚举
    ,索引和slice不使用字典。嘿,凯维n!我现在已经更新了我的问题,不确定这是否会给你们提供更好的背景,因为我仍在努力改进。在我的脑海里,听起来我问了一个非常好的问题,但我可能错了:)但我用你的测试代码并不是我想要的,因为我也想打印出值。基本上打印所有内容,key:value,但如果value确实包含None,那么只需跳过None值(不要打印None)在本例中,您仅打印键。是否要在到达第一个if语句时同时打印键和值?但仅从i到j,只要值不是无?您的回答是正确的:
    在本例中,您仅打印键。
    -这是因为我在使用dicts时没有使用任何值,因此uld看起来非常糟糕,因为它做了一些类似于
    有效载荷=['40 None',42 None',44 6',43 3',46 None',45 7',51',48',47',39']
    的事情,所以我想改为转换为Dict。这意味着如果有值,我会同时打印键和值(这意味着它不应该包含值
    None
    ).i到j取决于总字符数是否达到x个字符,在我们的示例中,我们检查总字符数是否超过10个,如果超过10个,则使用i到j打印。哇!这太漂亮了!这正是我想要的!这太酷了!
    payload = {'40': None, '42': None, '44': '6', '43': '3', '46': None, '45': '7', '51': None, '48': None, '47': None,
               '39': None}
    
    characterCount, i = 0, 0
    for j, item in enumerate(payload):
        if len(item) + characterCount > 5:
            selectedPayloads = ['{0} {1}'.format(k, payload[k]) for k in list(payload)[i:j] if payload[k] is not None]
            if len(selectedPayloads) != 0:
                print('\n'.join(selectedPayloads))
            characterCount, i = len(item), j
        else:
            characterCount += len(item)