Python 如何使字典中的某些值相加到100?

Python 如何使字典中的某些值相加到100?,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,我有一本词条不一的字典。每个项目的值可以是1或0。值为1的值存储在列表中并计数。然后使用该值计算一个百分比,该百分比将用于替换值1 例如:如果我有10个项目,只有7个项目包含值1,则计算的百分比将为100/7=14。因此,这7项将有一个新值14 但是还有一个余数,我想让一些项目获得这个余数(因此5个项目的值为14,2个项目的值为15,因此(5*14)+(2*15)=100) 这怎么可能呢 这是我使用的获取百分比值的代码,但我不确定如何实现剩余部分(我只想在字典中显示整数): 整数除法应使用//

我有一本词条不一的字典。每个项目的值可以是
1
0
。值为
1
的值存储在列表中并计数。然后使用该值计算一个百分比,该百分比将用于替换值
1

例如:如果我有10个项目,只有7个项目包含值
1
,则计算的百分比将为
100/7=14
。因此,这7项将有一个新值
14

但是还有一个余数,我想让一些项目获得这个余数(因此5个项目的值为
14
,2个项目的值为
15
,因此
(5*14)+(2*15)=100

这怎么可能呢


这是我使用的获取百分比值的代码,但我不确定如何实现剩余部分(我只想在字典中显示整数):


整数除法应使用//,余数应使用%:

someDict = {
        'item_01': 0,
        'item_02': 0,
        'item_03': 0,
        'item_04': 1,
        'item_05': 1,
        'item_06': 1,
        'item_07': 1,
        'item_08': 1,
        'item_09': 1,
        'item_010': 1
        }

percentage_list = []
for key, value in someDict.items():
    if value == 1:
        percentage_list.append(value)

percentage_value = 100 // len(percentage_list)
remainder_value = 100 % len(percentage_list)

# Replace all 1's in someDict with percentage value
for key, value in someDict.items():
    if value == 1:
        if remainder_value > 0:
            someDict[key] = percentage_value + 1
            remainder_value -= 1
        else:
            someDict[key] = percentage_value

print(someDict)

整数除法应使用//,余数应使用%:

someDict = {
        'item_01': 0,
        'item_02': 0,
        'item_03': 0,
        'item_04': 1,
        'item_05': 1,
        'item_06': 1,
        'item_07': 1,
        'item_08': 1,
        'item_09': 1,
        'item_010': 1
        }

percentage_list = []
for key, value in someDict.items():
    if value == 1:
        percentage_list.append(value)

percentage_value = 100 // len(percentage_list)
remainder_value = 100 % len(percentage_list)

# Replace all 1's in someDict with percentage value
for key, value in someDict.items():
    if value == 1:
        if remainder_value > 0:
            someDict[key] = percentage_value + 1
            remainder_value -= 1
        else:
            someDict[key] = percentage_value

print(someDict)

如果由于某种原因,在计算
百分比值之后,剩余的余数使得每个元素的增益可能超过
1

num_divisions = len(percentage_list)

remainder = 100 - percentage_value * num_divisions

# Replace all 1's in someDict with percentage value
for i, key in enumerate(filter(lambda k: someDict[k] == 1, someDict)):
    extra = int(remainder/(num_divisions - i))

    someDict[key] = percentage_value + extra

    remainder -= extra

如果由于某种原因,在计算
百分比值之后,剩余的余数使得每个元素的增益可能超过
1

num_divisions = len(percentage_list)

remainder = 100 - percentage_value * num_divisions

# Replace all 1's in someDict with percentage value
for i, key in enumerate(filter(lambda k: someDict[k] == 1, someDict)):
    extra = int(remainder/(num_divisions - i))

    someDict[key] = percentage_value + extra

    remainder -= extra


您的描述计算的百分比不正确。7/10*100将生成正确的百分比为什么在所有键名都只是一个枚举的情况下首先使用字典?使用列表。@timgeb-显示的键名只是一个示例,它们根本没有枚举:)@Joseph ah,确定:)您的描述计算的百分比不正确。7/10*100将生成正确的百分比为什么您首先使用字典,而所有的关键字名称都只是一个枚举?使用列表。@timgeb-显示的键名只是一个示例,它们根本没有被枚举:)@Joseph ah,ok:)“您应该使用//进行整数除法,使用%进行余数”您是对的:百分比值,余数值=divmod(100,len(百分比列表))也可以工作。不过,我想通过使用单个运算符来更清楚地说明这一点。谢谢,我将在周末对此进行测试并报告:)您可以使用
someDict[key]=percentage_value+(rements_value>0),而不是检查
rements_value
是否大于
0;余数_value-=1
并完全去掉if语句,我已经计时,它以相同的速度运行。“应该使用//进行整数除法,使用%进行余数”你是对的:percentage _value,rements _value=divmod(100,len(percentage _list))也可以工作。不过,我想通过使用单个运算符来更清楚地说明这一点。谢谢,我将在周末对此进行测试并报告:)您可以使用
someDict[key]=percentage_value+(rements_value>0),而不是检查
rements_value
是否大于
0;余数_value-=1
并完全去掉if语句,我已经计时,它以相同的速度运行。谢谢,将在周末测试并返回:)谢谢,将在周末测试并返回:)