基于计数器递增 Python 字典值

2024-03-21

我有一本包含重复值的字典。

Deca_dict = {
    "1": "2_506",
    "2": "2_506",
    "3": "2_506",
    "4": "2_600",
    "5": "2_600",
    "6": "1_650"
}

我使用了 collections.Counter 来计算每个集合的数量。

decaAdd_occurrences = {'2_506':3, '2_600':2, '1_650':1}

然后我创建了一个新的要更新的值字典。

deca_double_dict = {key: value for key, value in Deca_dict.items()
                        if decaAdd_occurrences[value] > 1}
deca_double_dict = {
    "1": "2_506",
    "3": "2_506",
    "2": "2_506",
    "4": "2_600"
}

(在本例中,它是没有最后一项的原始字典)

我试图弄清楚如何增加 num,使 counter_dict 的值减 1。这将更新除 1 之外的所有值,该值可以保持不变。目标输出允许其中一个重复项保持相同的值,而其余的值字符串的第一个数字将逐渐递增(基于重复计数的数量)。我正在尝试为原始 Deca_dict 表示的数据实现唯一值。

Goal output = {'1':'3_506', '2':'4_506', '3':'2_506', '4':'3_600', '5':'2_600'}

我开始按照以下方式处理事情,但最终只是增加了所有双项,导致我最初拥有的内容,除了值加一之外。对于上下文:原始 Deca_dict 的值被发现连接两个数字(deca_address_num 和 deca_num_route)。此外,homesLayer 是一个 QGIS 矢量图层,其中 deca_address_num 和 deca_num_route 存储在索引为 d_address_idx 和 id_route_idx 的字段中。

for key in deca_double_dict.keys():
    for home in homesLayer.getFeatures():
        if home.id() == key:
            deca_address_num = home.attributes()[d_address_idx]
            deca_num_route = home.attributes()[id_route_idx]
            deca_address_plus = deca_address_num + increment
            next_deca_address = (str(deca_address_plus) + '_' +
                                 str(deca_num_route))
            if not next_deca_address in Deca_dict.values():
                update_deca_dbl_dict[key] = next_deca_address

结果是没用:

Update_deca_dbl_dict = {
    "1": "3_506",
    "3": "3_506",
    "2": "3_506",
    "5": "3_600",
    "4": "3_600"
}

我的第二次尝试尝试添加一个计数器,但东西放在了错误的位置。

for key, value in deca_double_dict.iteritems():
    iterations = decaAdd_occurrences[value] - 1
    for home in homesLayer.getFeatures():
        if home.id() == key:
            #deca_homeID_list.append(home.id())
            increment = 1
            deca_address_num = home.attributes()[d_address_idx]
            deca_num_route = home.attributes()[id_route_idx]
            deca_address_plus = deca_address_num + increment
            next_deca_address = (str(deca_address_plus) + '_' +
                                 str(deca_num_route))
            #print deca_num_route
            while iterations > 0:
                if not next_deca_address in Deca_dict.values():
                    update_deca_dbl_dict[key] = next_deca_address
                    iterations -= 1
                    increment += 1

UPDATE尽管下面的答案之一适用于增加字典中的所有重复项目,但我正在尝试重新编写我的代码,因为我需要将这个比较条件与原始数据进行比较才能增加。我仍然得到与第一次尝试相同的结果(无用的结果)。

for key, value in deca_double_dict.iteritems():
    for home in homesLayer.getFeatures():
        if home.id() == key:
            iterations = decaAdd_occurrences[value] - 1
            increment = 1
            while iterations > 0:
                deca_address_num = home.attributes()[d_address_idx]
                deca_num_route = home.attributes()[id_route_idx]
                deca_address_plus = deca_address_num + increment
                current_address = str(deca_address_num) + '_' + str(deca_num_route)
                next_deca_address = (str(deca_address_plus) + '_' +
                                 str(deca_num_route))
                if not next_deca_address in Deca_dict.values():
                    update_deca_dbl_dict[key] = next_deca_address
                    iterations -= 1
                    increment += 1
                else:
                    alpha_deca_dbl_dict[key] = current_address
                    iterations = 0

我想这就是你想要的。我稍微修改了您的输入字典以更好地说明发生的情况。与你正在做的事情的主要区别是decaAdd_occurrences,它是从创建的Counter字典,不仅记录计数,还记录当前地址的值num字首。这使得我们可以知道接下来会发生什么num要使用的值是因为它和计数在修改过程中都会更新Deca_dict.

from collections import Counter

Deca_dict = {
    "1": "2_506",
    "2": "2_506",
    "3": "2_506",
    "4": "2_600",
    "5": "1_650",
    "6": "2_600"
}

decaAdd_occurrences = {k: (int(k.split('_')[0]), v) for k,v in
                                Counter(Deca_dict.values()).items()}

for key, value in Deca_dict.items():
    num, cnt = decaAdd_occurrences[value]
    if cnt > 1:
        route = value.split('_')[1]
        next_num = num + 1
        Deca_dict[key] = '{}_{}'.format(next_num, route)
        decaAdd_occurrences[value] = next_num, cnt-1  # update values

更新的词典:

Deca_dict -> {
    "1": "3_506",
    "2": "2_506",
    "3": "4_506",
    "4": "3_600",
    "5": "1_650",
    "6": "2_600"
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于计数器递增 Python 字典值 的相关文章

随机推荐

  • 从用于计算三角形和外接圆的 Swingworker 中重新绘制小程序

    我正在尝试复制找到的小程序here http www diku dk hjemmesider studerende duff Fortune 作为练习的一部分 该小程序使用 财富 的算法来生成两者 Voronoi 图和 Delaunay 三
  • 大背景图像和屏幕尺寸

    我正在创建一个网站 该网站将使用无法平铺的图像 我需要这张图像覆盖整个背景屏幕 但是 我希望它能够在大型显示器和小型显示器上运行 我应该制作一张大背景图像并使用它缩小它吗background size或者我应该创建不同尺寸的同一图像的多个版
  • 当定义需要 import 语句时,如何扩展现有接口?

    我创建了一个自定义 Knockout 扩展器 但在扩展 Knockout 定义文件提供的现有接口时遇到了问题 扩展器 Numeric ts import as ko from knockout function Extender targe
  • 关于如何以编程方式从 json 文件开始创建自定义 org.apache.spark.sql.types.StructType 架构对象

    我必须使用 json 文件中的信息创建一个自定义 org apache spark sql types StructType 架构对象 json 文件可以是任何内容 所以我在属性文件中对其进行了参数化 属性文件如下所示 ruta al es
  • 来自 Bitbucket 的“Go Get”私人仓库

    所以基本上 我有一个 Openshift 项目 在 Git 推送上 使用 Go get 下载所有库并即时构建项目 因此 我有一些代码不希望人们从我自己的库中看到 为了正确编译 代码需要从 github com 或另一个存储库获取 所以我创建
  • Ant 不可变属性到可变属性

    我有个问题 我正在使用 maven 的 antrun 插件 然后执行下一步 我有文件夹和子文件夹 我不知道什么叫子文件夹及其编号 我用它们的名称对此子文件夹进行存档 子文件夹名称 1 存档名称 1 acp
  • 我应该声明并检查 PHP 中是否存在变量吗?

    我注意到 XAMPP 上启用了严格的错误报告 并且现在出现未定义的索引错误 我只有两个小问题 我还在学习 我知道你不知道have在 PHP 中声明变量 但是声明它们有什么好处吗 如果不是 为什么在我未定义错误的情况下启用严格错误报告时会出现
  • 从字符串生成正则表达式

    我希望从包含数字的字符串生成正则表达式 然后使用它作为模式来搜索相似的字符串 例子 String s Page 3 of 23 如果我将所有数字替换为 d StringBuilder sb new StringBuilder for int
  • 在 JavaScript 中移动鼠标指针

    是否可以使用 JavaScript 移动鼠标 使其位于文本输入内 我不知道如何移动实际渲染的鼠标指针 但是您可以将焦点设置在元素上吗 document getElementById the text input id focus
  • ColdFusion 站点应使用哪种计算机辅助翻译格式?

    我正在创建一个多语言网站 需要支持至少五种不同的语言 包括韩语和中文 站点语言是 ColdFusion 因此 Java 是本地语言 我想让网站尽可能容易地供下一个程序员更新 并让第三方翻译人员使用比挖掘 SQL 数据库更容易的工具 到目前为
  • Node.js 找不到模块 - 干扰 Windows 上的 cygwin

    我正在测试 Bootstrap 框架 来自 Twitter 并尝试在安装 Node js 后在本地构建它 它失败了 因为它找不到 less 模块 我也使用 npm install g less 安装了该模块 C Users geir cod
  • makefile 并行运行目标

    我有以下 makefile 有两条规则 有没有办法并行运行这两个规则 我的意思是最大化 核心能力 我看到这个section https www gnu org software make manual make html Parallel但
  • sql server UTF8问题

    我有一些 utf8 数据 我想批量插入 sql server 2005 我使用的是 CODEPAGE 65001 BULK INSERT bla FROM D bla txt WITH CODEPAGE 65001 FIELDTERMINA
  • ASIHTTPRequest UIWebView加载文档

    使用 AsiHttpRequest 和 UIWebView 查看文档 pdf doc xls 的最佳方式是什么 我尝试了以下操作 但 UIWebView 正在显示 html NSString baseURL http xxxxxx open
  • Unity - GetComponentsInChildren() 返回顺序

    我知道它返回在父级层次结构中找到的给定组件 但是按什么顺序 我需要知道 因为我想用它来初始化我的脚本 并且我必须首先初始化父级 然后再初始化子级 因为较低层次结构的组件使用其直接父级的计算值 GetComponentsInChildren
  • 如何以编程方式从菜单中删除菜单项?

    我正在开发一些 Android 应用程序 并且我有一些菜单代码 menu menu
  • 使用powershell从txt文件中提取带有两个分隔符的列

    我有一个sample txt 文件 Processing Cl Cog u l Cg txt V DM Nv AL Ft He Se Fe Bt L Ey 0 Ct Cu3 我需要将此文件分成 4 个不同的列 并在之前添加新列 输出 csv
  • SignalR:使用 GlobalHost.ConnectionManager 发送数据不起作用

    我有一个这样的中心 public class MessageHubBub Hub public void ServerMethod Clients All sayHi hello GlobalHost ConnectionManager G
  • 无法在React应用程序中导入web3库

    node modules cipher base index js 中的错误 3 16 43 找不到模块 错误 无法解析 C Users Sumana Desktop Web3 web3app node modules cipher bas
  • 基于计数器递增 Python 字典值

    我有一本包含重复值的字典 Deca dict 1 2 506 2 2 506 3 2 506 4 2 600 5 2 600 6 1 650 我使用了 collections Counter 来计算每个集合的数量 decaAdd occur