【问题标题】:Defining variables in a loop based on a dictionary基于字典在循环中定义变量
【发布时间】:2020-04-12 12:43:41
【问题描述】:

我正在使用 Python 3.x 和 Pydicom 将 DICOM 转换为 PNG。读取 DICOM 标头标签时偶尔会出现错误,导致脚本崩溃。到目前为止,我通过使用如下异常来解决它:

try: studyd = ds.StudyDate
except: studyd = ''
pass
...

这种重复的方法会延长代码。

不幸的是,我未能通过定义包含 Pydicom 标头和目标变量的字典并循环遍历它来优化代码。我怎么能这样做:

ds = pydicom.dcmread()
tags = { 'StudyDate': 'studyd', 'Modality': 'modal', 'PatientName': 'patname', etc.}
for key, val in tags.items():
...

【问题讨论】:

  • 你真的需要这样定义变量吗?您不能使用字典来存储值吗?
  • 我更喜欢字典。想要创建一个循环,将我的字典的“val”设置为变量名,并将 ds.DICOMTAG 设置为它的值。

标签: python python-3.x for-loop pydicom


【解决方案1】:

试试这个:

ds = pydicom.dcmread()
tags = { 'StudyDate': 'studyd', 'Modality': 'modal', 'PatientName': 'patname', etc.}
header_dict = dict()
for key, val in tags.items():
    header_dict[val] = getattr(ds, key)
print(header_dict)

使用getattr 获取标头值并将其存储在针对指定名称的字典中

【讨论】:

  • 太棒了,这成功了!是否可以将字典写回:“globals().update(header_dict)”
  • 是的,你可以这样做。但是像这样动态地创建变量(特别是全局变量)通常是不好的做法。你也会混淆你的 IDE,因为它不知道这些变量来自哪里
  • 您能推荐一种更好的方法来从字典中建立变量吗?
  • 您可以只使用字典条目来代替变量。喜欢header_dict['studyd']
  • 谢谢!这对我帮助很大。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多