Python递归数据读取

2024-04-26

如果你曾经玩过《我的世界》,下面的内容将会更有意义。由于你们中的许多人还没有,我将尽力解释它

我正在尝试编写一个递归函数,它可以找到从 Minecraft 食谱的平面文件中制作任何 Minecraft 物品的步骤。这个实在是让我难住了。

平面文件有点长,所以我将其包含在this https://gist.github.com/1989842 gist.

def getRecipeChain(item, quantity=1):
    #magic recursive stuffs go here

所以基本上我需要查找第一个食谱,然后查找第一个食谱的所有组件的食谱,依此类推,直到找到没有食谱的项目。每次我需要将配方附加到列表中时,我都会得到一种关于制作物品的顺序的指令集。

这是我现在拥有的功能(不起作用的功能)

def getRecipeChain(name, quantity=1):
    chain = []

    def getRecipe(name1, quantity1=1):
        if name1 in recipes:
            for item in recipes[name1]["ingredients"]["input"]:
                if item in recipes:
                    getRecipe(item, quantity1)
                else:
                    chain.append(item)

    getRecipe(name, quantity)
    return chain

这是我想要的理想输出。它是一个字典,其中存储了商品名称和数量。

>>> getRecipeChain("solar_panel", 1):
{"insulated_copper_cable":13, "electronic_circuit":2, "re_battery":1, "furnace":1, "machine":1, "generator":1, "solar_panel":1}

那么问题是,我该怎么做?

我知道要求别人为你工作在这里会让人皱眉,所以如果你觉得这有点太接近你只是为我做编码,就这么说吧。


这可以通过使用优雅地解决collections.Counter http://docs.python.org/library/collections.html#collections.Counter,支持加法:

from collections import Counter

def getRecipe(name, quantity=1):
  if not name in recipes: return Counter({name: quantity})

  subitems = recipes[name]["ingredients"]["input"]
  return sum((getRecipe(item, quantity) for item in subitems), 
             Counter())

print repr(dict(getRecipe("solar_panel")))
# => {'copper': 39, 'refined_iron': 10, 'glass': 3, 
#     'rubber': 78, 'cobblestone': 8, 'tin': 4, 
#     'coal_dust': 3, 'nothing': 10, 'redstone': 6}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python递归数据读取 的相关文章

  • Python 3.7 Windows 不支持 dbm.gnu 吗?

    做的时候 import dbm gnu 在适用于 Windows 的标准 Python 3 7 6 64 上 我得到 文件 C Python37 lib dbm gnu py 第 3 行 位于从 gdbm 导入 ModuleNotFound
  • Python 字符串到 SQL IN 参数的列表

    我在 python 中有这个查询 ssim group S1200 S1300 query select WIPMessageCnt from waferdata where recipename in s and equipment an
  • 如何检查有效的电子邮件地址? [复制]

    这个问题在这里已经有答案了 有没有一种好方法可以使用正则表达式检查表单输入以确保它是正确样式的电子邮件地址 从昨晚开始就一直在搜索 如果它是子域名电子邮件地址 那么每个回答过人们有关该主题的问题的人似乎也有问题 无关紧要 即使您可以验证电子
  • 配置解析器和带 % 的字符串

    愚蠢的问题 当然 简单的答案 我正在使用 configparser 从文件中读取一些字符串 当字符串具有 符号 例如 时 它会抱怨 ConfigParser InterpolationSyntaxError 后必须跟 或 找到 有人熟悉这个
  • django自定义模板标签中的访问请求

    我在 myapp extras py 中的代码 from django import template register template Library register inclusion tag new userinfo html d
  • 由于 __init__ 构造函数而产生的 Pytest 集合警告

    我一直在使用 Pytest 和 Selenium Web 驱动程序自学测试自动化 我所有的测试函数都在一个名为测试网络 py 它位于名为的目录中tests 我将所有函数分开 并将它们放在一个名为的单独目录中的自己的文件中测试用例 例如 这就
  • 在 Tensorflow 2.0 中的 tf.function input_signature 中使用字典

    我正在使用 Tensorflow 2 0 并面临以下情况 tf function def my fn items do stuff return 如果 items 是张量的字典 例如 item1 tf zeros 1 1 item2 tf
  • / __init__() 处的 TypeError 恰好采用 1 个参数(给定 2 个)

    我有点困惑为什么会出现这个错误 我不知道这个额外的参数是从哪里来的 Environment Request Method GET Request URL http 0 0 0 0 5000 Django Version 1 6 4 Pyth
  • 将 Django 模型映射到外部 API

    上下文 我有一个外部 API 提供数据并允许发布新数据或修补现有数据 API 响应示例 response requests get http api band 4 print response json id 4 name The Beat
  • Pygame - 如何使 hitbox 与敌人的移动一起工作?

    我正在用 Pygame 制作一个 Python 游戏 目前正在研究 hitbox 程序应该暂停 设置play False 每当玩家与敌人碰撞时 只有当我注释掉所有敌人的移动 第 56 64 行 时它才 有效 但这显然不是最好的选择 我读过有
  • Python:球体的交集

    我对编程非常陌生 但我决定承担一个有趣的项目 因为我最近学会了如何以参数形式表示球体 当三个球体相交时 有两个不同的交点 除非它们仅在一个奇点处重叠 球体的参数表示 我的代码是根据答案修改的Python matplotlib 绘制 3d 立
  • 快速分类(分箱)

    我有大量条目 每个条目都是浮点数 这些数据x可以通过迭代器访问 我需要使用像这样的选择对所有条目进行分类10
  • Tensorflow无法分配设备进行操作

    我正在尝试跑步NVidia 脸部生成器演示 https github com tkarras progressive growing of gans在我的电脑上 我使用的是 Windows 10 我已经下载了源代码 并尝试按照页面下方的步骤
  • 如何在使用 python 下载时优雅地超时

    我正在循环下载大量文件 其中包含以下代码 try urllib urlretrieve url2download destination on local filesystem except KeyboardInterrupt break
  • matplotlib 的上限/下限

    我想用误差线绘制一些数据点 其中一些数据点只有上限或下限 而不是误差线 所以我尝试使用索引来区分带有误差条的点和带有上限 下限的点 但是 当我尝试这样的事情时 errorbar x i y i yerr ymin i ymax i 我收到错
  • Python 请求:使用 Multipart/form-data 在 Facebook 上发布图像

    我正在使用 facebook API 在页面上发布图像 我可以使用以下命令从网络发布图像 import requests data url url caption caption access token token status requ
  • Python 类:通过传递值实现单例还是非单例?

    我有一个 Python 3 类 目前是使用 a 定义的单例 singleton装饰器 但有时需要not成为单身人士 问题 是否可以在从类实例化对象时执行类似于传递参数的操作 并且该参数确定该类是否是单例 我试图找到一种替代方法来复制类并使其
  • Python从更高级别的包导入模块

    这是我的包层次结构 app init py Empty file server py global vars py handlers init py Empty file url1 init py Empty file app1 py ap
  • 在 Python 中使用列表理解来执行类似于 zip() 的操作?

    我是一名 Python 新手 我想做的事情之一就是围绕列表理解进行思考 我可以看到这是一个非常强大的功能 值得学习 cities Chicago Detroit Atlanta airports ORD DTW ATL print zip
  • Pandas DataFrame 中多列的映射方法

    我有一个 Pandas 数据框 其中的值是列表 import pandas as pd DF pd DataFrame X 1 5 1 2 Y 1 2 5 1 3 5 DF X Y 0 1 5 1 2 5 1 1 2 1 3 5 我想检查

随机推荐

  • strdup 还是 _strdup?

    当我使用strdup在 Microsoft Visual C 中 它警告我 警告 C4996 strdup 此项目的 POSIX 名称已弃用 相反 请使用 ISO C 一致名称 strdup 详情请参见在线帮助 如此看来 strdup是正确
  • 为什么用“自我”。什么时候不被强迫?

    我注意到我的编码方式 糟糕 和我从其他人那里看到的代码之间存在差异 谁能解释一下为什么我看到有些人使用 self varname anotherpropertie When varname anotherpropertie 似乎也同样有效
  • 将对象从一个派生类更改为另一个派生类

    我有几个类共享一个公共基类 除了它们的方法工作方式不同之外 因此 在下面的示例中 加法器和乘法器除了执行计算的方式不同之外都是相同的 有没有办法即时将 a 更改为乘数 我是否需要实现派生类之间相互转换的方法 例如就像是 a a asMult
  • JQuery Internet Explorer 和 ajaxstop

    document ajaxStart function loading show document ajaxStop function loading hide 如何在 Internet Explorer 中调用 ajaxStop 事件 a
  • H2数据库,通过从CSVREAD选择结果插入

    我有一个 CSV 文件 例如 1 hello 13 2 world 14 3 ciao 26 我正在尝试使用CSVREAD函数将该文件读入数据库 如下所示 insert into my table id message code value
  • 使用 JGit TreeWalk 列出文件和文件夹

    我想使用 JGit 显示头部修订的所有文件和文件夹的列表 我可以使用 TreeWalk 列出所有文件 但这不会列出文件夹 这是我到目前为止所拥有的 public class MainClass public static void main
  • javax.xml.stream.XMLStreamException:[行,列]处的解析错误:[2,1](jboss-deployment-struct.xml)

    我希望我的应用程序使用验证 api 1 1 0 Finaljar 而不是容器提供的 jar验证 api 1 0 0 GAJBoss AS 7 1 1 附带 我创建了JBossjboss 部署 结构 xml如下
  • 当你说 Ruby 是反射型时,这主要是指“鸭子类型”吗?

    我正在读一篇描述 Ruby 的文章 其中写道 Ruby 被认为是 反思性的 语言 因为有可能 Ruby 程序分析自身 在 其构成条款 使 调整其工作方式 以及 甚至用其他代码覆盖自己的代码 代码 我对 反射 这个术语感到困惑 这主要是在谈论
  • 如何使 Flexbox 响应式?

    我有一个包含两个元素的 div 我想水平堆叠它们 Div C 具有固定宽度 div B 将填充其余空间 然而 div B 的内容可能是固定宽度 动态 或 100 宽度 div B 我想要的效果是 如果屏幕宽度足够小 以至于在 div B 和
  • 为什么在具体化中将 clpfd 变量分配给实际值?

    我正在开发一个 SWI Prolog 程序 该程序使用 CLP FD 约束来找到特定问题的解决方案 为此 我碰巧需要两个列表的 未定位 重叠 那是 List La长度为A List Lb长度为 B A gt B 未定位的重叠列表是La Lb
  • 我们有什么理由不使用 UIImageView 的子类吗?

    我目前正在尝试创建 UIImageView 的子类 以便使其从服务器异步下载图像 我尝试自己做 但还没有走得太远 D 不管怎样 我环顾四周 发现了这个 异步图像下载 http www markj net iphone asynchronou
  • 包名中的“dev”后缀?

    使用 apt get 时 我看到一些软件包的名称后面有一个 dev 后缀 libreadline5 libreadline dev zlib1g zlib1g dev 这些到底是什么 我应该安装它们吗 你需要这些编译并链接因为它们提供了要链
  • webkit translate3d 问题(peek-thru)

    我正在使用 PhoneGap 构建一个 iOS 应用程序 我使用translate3d CSS 动画来创建 翻转 效果 这对于更简单的元素非常有用 带有前 后 div 的 DIV 可能还有一个或两个额外的跨度 但是当我尝试翻转更大的元素 即
  • 如何将C#中的时区信息转换为Java中的时区信息?

    我有一个系统 其中包含C 后端和一个Java前端 这C 后端与其他系统和一些移动设备通信 On the C 另一方面 我的任务之一是识别来自移动设备的时间戳的时区并创建相应的TimeZoneInfo目的 这是没有任何问题的工作 On the
  • AsyncResponse ConnectionCallback 在泽西岛中不会触发

    对于异步编程 Jersey JAX RS 提供了ConnectionCallback当连接断开时要执行的回调 来自泽西岛文档 https jersey java net documentation latest async html d0e
  • SymPy 中指数到三角函数的转换同时简化 - 一个顽固的表达式

    我一直在努力简化 exp 2 I N 1 2 exp 2 I N 1 2 4 exp 2 I N cos N 2 答案应该是 sin N 2 但输出与输入相同 我努力了 rewrite cos 然后简化 触发 扩展以及几乎所有我可以从帮助资
  • UIWebView中检测并拦截视频播放

    我想拦截 UIWebView 中的点击 然后使用视频的 URL 这怎么可能 我发现了一个有点类似的帖子 它指出了 webView shouldStartLoadWithRequest navigationType 代表 我似乎无法通过该委托
  • Android Eclipse 模拟器上的相机:

    我的笔记本电脑盖子上没有嵌入式摄像头 我将通过外部 USB 摄像头进行连接 模拟器运行时可以识别这个吗 我会实时显示 AVD 皮肤屏幕内的图像吗 在当前版本的模拟器 Ice Cream Sandwich API14 Linux 中 web相
  • 如何更改 MathJax 中数学的填充?

    就像 当我的 div 中有我的数学部分时 它看起来像这样 我将 div 的填充设置为0 那么 有没有办法改变数学填充的值呢 发现于here https stackoverflow com questions 11296415 how to
  • Python递归数据读取

    如果你曾经玩过 我的世界 下面的内容将会更有意义 由于你们中的许多人还没有 我将尽力解释它 我正在尝试编写一个递归函数 它可以找到从 Minecraft 食谱的平面文件中制作任何 Minecraft 物品的步骤 这个实在是让我难住了 平面文