Pythonで文字列.format()を使ってフォーマットする

2013-06-11
このエントリーをはてなブックマークに追加

これまでですと文字列に変数埋め込んだりして成形するには%演算子を使ってたんですけど、どうやら%演算子はいずれなくなるとのことでして、format()を使ってみました。

# -*- coding: utf-8 -*-

_text = "あ%sう%sお" % ("い", "え")
print(_text)

_aiueo = "あ{0}う{1}お".format("い", "え")
print(_aiueo)

_kakikukeko = "か{ki}く{ke}こ".format(ki="き", ke="け")
print(_kakikukeko)

一番上が使い慣れた%演算子を使った書き方ですね。二番目と三番目がformat()を使った書き方。インデックスを指定してもいいし、添字を指定してもいいです。

正直、添字を使った書き方するときは辞書で書きたかったな。

_kakikukeko = "か{ki}く{ke}こ".format({'ki': 'き', 'ke': 'け'})

↑これはエラー出ますからね!

Python2.7でも3.3でも動作するサンプルです。

Pythonでリストの中にある辞書の値でソートする方法

2013-06-05
このエントリーをはてなブックマークに追加

リストをソートするだけなら簡単なんですけど、リストの要素が辞書で、その辞書の値でソートしたい時はちょっと面倒だったのでメモ。面倒っていってもたかが知れてるというか、ハセテツ的に面倒だっただけですけど。

_d = [
    {
        'member': 'aaa',
        'score': 500,
    },
    {
        'member': 'bbb',
        'score': 300,
    },
    {
        'member': 'ccc',
        'score': 100,
    },
    {
        'member': 'ddd',
        'score': 200,
    },
    {
        'member': 'eee',
        'score': 400,
    }
]

aaaさんからeeeさんがいて、それぞれ点数がscoreで表されてる時にscoreの高い順、低い順でソートします。

_asc = sorted(_d, key=lambda member: member['score'])
for item in _asc:
    print item['member'], item['score']

print '-------------------'

_desc = sorted(_d, key=lambda member: member['score'], reverse=True)
for item in _desc:
    print item['member'], item['score']

出力されるのは以下になります。

ccc 100
ddd 200
bbb 300
eee 400
aaa 500
——————-
aaa 500
eee 400
bbb 300
ddd 200
ccc 100

reverse=Trueをつければ降順だし、つけなければ昇順です。覚えておくと便利です。
Tags: