小编mar*_*991的帖子

如果未在str.format中传递,则将值保留为空

我遇到了一个相当简单的问题,我无法想出一个优雅的解决方案.

我正在str.format一个函数中创建一个字符串,该函数在一个dict替换中传递以用于格式.我想创建字符串并使用值格式化它们,如果它们被传递,否则将它们留空.

防爆

kwargs = {"name": "mark"}
"My name is {name} and I'm really {adjective}.".format(**kwargs)
Run Code Online (Sandbox Code Playgroud)

应该回来

"My name is mark and I'm really ."
Run Code Online (Sandbox Code Playgroud)

而不是抛出KeyError(如果我们不做任何事情会发生什么).

令人尴尬的是,我甚至无法为这个问题提出一个不优雅的解决方案.我想我可以通过不使用来解决这个问题str.format,但如果可能的话,我宁愿使用内置(主要是我想要的).

注意:我事先并不知道将使用哪些密钥.如果有人包含一把钥匙但是没有把它放在kwargs dict中,我试图优雅地失败.如果我100%准确地知道将要查找哪些键,我只需填充所有键并完成它.

python string-formatting missing-data

20
推荐指数
2
解决办法
6001
查看次数

优雅地分配未知长度的变量

(对不起.标题很不清楚.我无法想出一个好的.)

假设我有一个这样的网址(它是root-relative):

"/forums/support/windows/help_i_deleted_sys32/6/"
Run Code Online (Sandbox Code Playgroud)

我试图将其拆分为这样的类结构:

class Forum_Spot:
    def __init__(self, url):
        parts = url.strip("/").split("/")
        #parts is now ["forums", "support", "windows", "help...", "6"]

        self.root = "forums"
        self.section = "support"
        self.subsection = "windows"
        self.thread = "help..."
        self.post = "6"
Run Code Online (Sandbox Code Playgroud)

但是说我不知道​​网址到底有多长(可能是"/ forums/support /","/ forums/support/windows /"等)(但我知道它不会更深比5级).任何人都可以想出一种优雅的方式来分配这些值,让任何未分配的部分None?(即"/ forums/support/windows /",线程和帖子属性为None)

我知道我可以这样做:

class Forum_Spot:
    def __init__(self, url):
        parts = url.strip("/").split("/")
        #parts is now ["forums", "support", "windows", "help...", "6"]

        if len(parts) > 0:
            self.root = parts[0]
        else:
            self.root = None
        if len(parts) > 1:
            self.section = parts[1]
        else: …
Run Code Online (Sandbox Code Playgroud)

python

4
推荐指数
1
解决办法
134
查看次数

为什么Postgres允许我让列不在Group By中?

为什么这个查询:

SELECT inv.batch_number_id AS batch_number_id,
   inv.expiry_date AS expiry_date,
   inv.facility_id AS facility_id,
   inv.id AS id,
   fac.code AS facility_code,
   inv_st.description AS status,
   bn.batch_nbr AS batch_number,
   bn.expiry_date AS batch_expiry_date,
   sum(CASE WHEN al.status_id < 90 THEN al.alloc_qty ELSE 0 END) AS alloc_qty
FROM inventory inv
INNER JOIN facility fac ON inv.facility_id = fac.id
INNER JOIN inventory_status inv_st ON inv.status_id = inv_st.id
LEFT OUTER JOIN batch_number bn ON inv.batch_number_id = bn.id
LEFT OUTER JOIN allocation al ON al.from_inventory_id = inv.id
GROUP BY inv.id,
     facility_code,
     status, …
Run Code Online (Sandbox Code Playgroud)

sql postgresql

0
推荐指数
1
解决办法
447
查看次数