0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【python】dict変数に苦労した(1)

Last updated at Posted at 2021-12-24

2021年8月からAWSのLAMBDAとdjangoでpythonの仕事をやり始めたんですが、これまでPHPばかりに偏ってたものでpythonに慣れるのに結構苦労した事の中で、dict変数があったのでその辺の事を書いてみます。

###1.PHPだと連想配列は簡単に作れたが、dictは宣言が無いとエラーになって勝手に作ってくれない
PHPでは、自分の必要な時に

$sample1["hoge"] = "aaabbbccc";

のように書けば、配列変数$sample1が作成され、$sample1["hoge"]という連想配列が作成され、aaabbbcccを代入してくれる。

pythonのdict変数でこれをやると、NameErrorとなってしまう。

C:\project\python_test>python3 sample1.py
Traceback (most recent call last):
  File "sample1.py", line 2, in <module>
    sample1["hoge"]  = "aaabbbccc"
NameError: name 'sample1' is not defined

通常の変数は宣言が必要ないのに、dictやlist変数になると、途端に話が変わってくる事に最初はとまどった。
以下のように書くと正常に実行できる。

sample1 = {"hoge":""}
sample1["hoge"]  = "aaabbbccc"

ここで、覚えたての頃は、sample1 = {"hoge":""}と書くのかsample1 = dict(hoge="")と書くのがいいのか?といった表記で悩んだが、どっちでもいいというのがわかった。

##2.連想配列のキーを変数で渡したい時
次に、連想配列のキーを変数で渡したい時

$keystr = "hoge";
$samples1[$keystr] = "aaabbbccc";

PHPでは定数 or 変数で連想配列のキーを渡したい時にさほど違いはないが、dictも同様に

keystr = "hoge"
sample1 = {keystr:""}
sample1[keystr]  = "aaabbbccc"

で、同じ操作を実現可能です。1点気を付けることがあるとすれば、keystrを他のobjectから取り出した値のような場合に、必ず文字列になってるとは限らないので、str()関数で文字列化しておくと安全です。

##3.連想配列に複数のキーを変数で渡して代入したい時
最初に一番悩んだ部分がここだった。
というのは、jsonに変換した際に、
{"hoge1":"a","hoge2":"a"}
となってほしかった。
PHPでこういう事をしたかった。

$sample1 = array();
$keylist = array("hoge1","hoge2");
foreach($keylist as $keystr)
{
    $sample1[$keystr] = "a";
}

これと同じことをpythonのdictでやろうとするとPHPと同様に

keylist = ["hoge1","hoge2"]
value = "test"
sample1 = {}
for keystr in keylist:
    sample1[keystr] = value

先にsample1 = {}とsample1がdict変数であることを定義しておけば問題ない。

4.既に中身の入ったdict変数に要素を追加する時

$sample1 = array("hoge1"=>"test");
$keystr = "hoge2";
$value = "test2";
$sample1[$keystr] = $value;

この時もほぼPHPと同様な方法で代入できる。

keystr = "hoge2"
value = "test2"
sample1 = {"hoge1":"test"}
sample1[keystr] = value
または
sample1.update({keystr:value})

1回目はここまで。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?