RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1164131
Accepted
Body
Body
Asked:2020-08-10 14:36:53 +0000 UTC2020-08-10 14:36:53 +0000 UTC 2020-08-10 14:36:53 +0000 UTC

如何在python中将多个条件合并为一个?

  • 772

我使用 Vk API 并希望简化代码。因为我可以有10个这样的条件,但我不想用这个填写所有的代码。有没有办法减少?

这是代码:

def safe_file(posts):
    with open('test.csv', 'w', newline='', encoding='utf-8') as file:
        title = csv.writer(file, delimiter=';')
        title. writerow(['text', 'image', 'url'])
        for post in posts:
            try:
                if post ['id']:
                    i = post ['id']
                else:
                    i = 'pass'
                if post ['text']:
                    text = post ['text']
                else:
                    text = 'pass'
                if post ['attachments'][0]['photo']['sizes'][-1]['url']:
                    img = post ['attachments'][0]['photo']['sizes'][-1]['url']
                else:
                    img = 'pass'
            except:
                pass
                img = 'pass'

            title.writerow((text, i, img))

我需要简化这部分代码:

for post in posts:
            try:
                if post ['id']:
                    i = post ['id']
                else:
                    i = 'pass'
                if post ['text']:
                    text = post ['text']
                else:
                    text = 'pass'
                if post ['attachments'][0]['photo']['sizes'][-1]['url']:
                    img = post ['attachments'][0]['photo']['sizes'][-1]['url']
                else:
                    img = 'pass'
            except:
                pass
                img = 'pass'
python
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. Mike Lazko
    2020-08-10T15:31:24Z2020-08-10T15:31:24Z

    我会建议一个默认选项,所以让我们称之为

    def try_extract_image_url(post):
        try:
            return post['attachments'][0]['photo']['sizes'][-1]['url']
        except (KeyError, IndexError) as e:
            return None
    
    for post in posts:
        id = post['id'] or 'pass'
        text = post['text'] or 'pass'
        img = try_extract_image_url(post) or 'pass'
    

    您仍然可以解决此问题并提出更好的建议,例如,将“通过”替换为更具体的内容,以便更容易在代码中进一步过滤和处理它。例如,为此创建一个特殊对象。

    • 5
  2. Best Answer
    Sergey
    2020-08-10T15:27:13Z2020-08-10T15:27:13Z

    对于初学者,您可以使用条件运算符

    if post ['id']:
        i = post ['id']
    else:
        i = 'pass'
    

    使用条件表达式写得更短:

    i = post['id'] if post['id'] else 'pass'
    

    之后,我将创建一个执行所有三个任务的函数:

    def con_ass(post):
        i = post['id'] if post['id'] else 'pass'
        text = ...
        img = ...
        reurn i,text,img
        
    

    在程序中,这些分配看起来像这样:

    i,text,img = con_ass(post)
    

    在我看来 - 非常紧凑和可见。

    • 2
  3. Лиза Фенькова
    2020-08-12T21:35:06Z2020-08-12T21:35:06Z

    更正的代码:

    for post in posts:
                try:
                    if post ['id']:
                        i = post ['id']
                    elif: post ['text']:
                        text = post ['text']
                    elif: post ['attachments'][0]['photo']['sizes'][-1]['url']:
                        img = post ['attachments'][0]['photo']['sizes'][-1]['url']
                    else:
                        img = 'pass'
                except:
                    pass
                    img = 'pass'
    
    • 0

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5