来自两个词典:
d1 = {a:a for a in 'abcdefg'}
d2 = {n:n for n in range(10)}
我如何创建第三个像:
new_dict = {k:d1[k] if k in d1.keys() else k:d2[k] for k in 'abc123' }
它抛出了一个语法错误,但是列表理解似乎很好:
[a if a else 2 for a in [0,1,0,3]]
out[]: [2, 1, 2, 3]
此外,为什么会这样:
{k:d1[k] for k in 'abc123' if k in d1.keys() }
而这不是:
{k:d1[k] if k in d1.keys() for k in 'abc123' }
答案 0 :(得分:3)
如上所述,您的d1
和d2
似乎都是您设想解决问题并且不是必不可少的工件。简单来说:
>>> dictionary = {k: int(k) if k.isdigit() else k for k in 'abc123'}
>>> dictionary
{'b': 'b', '3': 3, '2': 2, '1': 1, 'a': 'a', 'c': 'c'}
>>>
或者您尝试解决的问题还有哪些?
答案 1 :(得分:2)
您不能在三元条件的else
部分使用键值对,如此。
请改为:
new_dict = {k: d1[k] if k in d1 else d2[int(k)] for k in 'abc123'}
# ^^<- make value d2[int(k)] on else
print(new_dict)
#{'2': 2, '1': 1, 'b': 'b', 'a': 'a', 'c': 'c', '3': 3}
请注意,if k in d1
会检查k
是否是字典d1
中的密钥。无需调用keys
方法。
答案 2 :(得分:2)
这是使用&#34; else&#34;进行字典理解的一般答案。当我搜索谷歌时,我发现了这篇文章,所以我希望它可以帮助未来的谷歌。
所以我想说我想在k和v上创建带有条件的字典
解决这个问题的一种天真的方式看起来像这样:
{k:v if (condition) else otherk:otherv for k,v in some_dictionary}
这不起作用,正如之前摩西科莱约耶所提到的那样。
但是,您可以对每个部分使用以下内容:
{k if condition1 else otherK: v if condition2 else otherV for k,v in some_dictionary}
请注意,我们在此处指定了键的赋值和值的赋值。 这里要注意的最重要的事情是:键和值之间的分隔符的位置。希望这会有所帮助。
以下是从以下位置获取自定义词典的示例: 对于英文字母 来自字母A-G将显示大写字母顺序的正值 来自字母J-Z显示小写字母的顺序的负值
这是基于特定条件的不同键和值的示例。 我希望这个解释得很好。
>>> def less_than_H_ascii_val(x):
... return x < ord('H')-ord('A')
...
>>> {chr(k+ord('A')) if less_than_H_ascii_val(k) else chr(k+ord('a')):
... k if less_than_H_ascii_val(k) else -k
... for k in range(26)}
{'A': 0, 'C': 2, 'B': 1, 'E': 4, 'D': 3, 'G': 6, 'F': 5, 'i': -8, 'h': -7, 'k': -10, 'j': -9, 'm': -12, 'l': -11, 'o': -14, 'n': -13, 'q': -16, 'p': -15, 's': -18, 'r': -17, 'u': -20, 't': -19, 'w': -22, 'v': -21, 'y': -24, 'x': -23, 'z': -25}
答案 3 :(得分:0)
purchasetype
等于:
<?php
$PurchaseType = "Cash";
$html = '
<html>
<body>
<label> variable here : "phpvariable" </label>
</body>
</html>
';
$path = (getenv('MPDF_ROOT')) ? getenv('MPDF_ROOT') : __DIR__;
require_once $path . '/vendor/autoload.php';
$mpdf = new \Mpdf\Mpdf([
'margin_left' => 20,
'margin_right' => 15,
'margin_top' => 48,
'margin_bottom' => 25,
'margin_header' => 10,
'margin_footer' => 10
]);
$mpdf->SetProtection(array('print'));
$mpdf->SetTitle("Acme Trading Co. - Invoice");
$mpdf->SetAuthor("Acme Trading Co.");
$mpdf->SetWatermarkText("Paid");
$mpdf->showWatermarkText = true;
$mpdf->watermark_font = 'DejaVuSansCondensed';
$mpdf->watermarkTextAlpha = 0.1;
$mpdf->WriteHTML($html);
$mpdf->Output();
后者更容易理解