Skip to content

Instantly share code, notes, and snippets.

@geovanisouza92
Last active January 6, 2016 15:57
Show Gist options
  • Select an option

  • Save geovanisouza92/40a80fcb73cf971b2acd to your computer and use it in GitHub Desktop.

Select an option

Save geovanisouza92/40a80fcb73cf971b2acd to your computer and use it in GitHub Desktop.
Comparativo entre formas de remover itens de um dicionário no Python
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def gen_dict(n):\n",
" \"\"\"Generate sample dict\"\"\"\n",
" return { 'item%d' % i : 'item%d' % i for i in xrange(n) }"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def dict_del(n):\n",
" \"\"\"Remove using dict.__del__(key)\"\"\"\n",
" d1 = gen_dict(n)\n",
" del d1['item123']\n",
" del d1['item456']\n",
" del d1['item789']"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def dict_pop(n):\n",
" \"\"\"Remove using dict.pop(key, default)\"\"\"\n",
" d1 = gen_dict(n)\n",
" d1.pop('item123', None)\n",
" d1.pop('item456', None)\n",
" d1.pop('item789', None)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def dict_map(n):\n",
" \"\"\"Map keys to dict.pop(key)\"\"\"\n",
" d1 = gen_dict(n)\n",
" map(d1.pop, ['item123', 'item456', 'item789'])"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def dict_map2(n):\n",
" \"\"\"Map keys to dict.pop(key, default)\"\"\"\n",
" d1 = gen_dict(n)\n",
" map(lambda k: d1.pop(k, None), ['item123', 'item456', 'item789'])"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def dict_regen(n):\n",
" \"\"\"Remove by recreating the dict\"\"\"\n",
" d1 = gen_dict(n)\n",
" d1 = { key: d1[key] for key in d1 if key not in ['item123', 'item456', 'item789'] }"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def dict_regen2(n):\n",
" \"\"\"Remove by recreating the dict (avoid dict.__getitem__(key))\"\"\"\n",
" d1 = gen_dict(n)\n",
" d1 = { key: value for key, value in d1.items() if key not in ['item123', 'item456', 'item789'] }"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def dict_regen3(n):\n",
" \"\"\"Remove by recreating the dict (avoid dict.__getitem__(key), w/ iterator)\"\"\"\n",
" d1 = gen_dict(n)\n",
" d1 = { key: value for key, value in d1.iteritems() if key not in ['item123', 'item456', 'item789'] }"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"n = 100000"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 loops, best of 3: 154 ms per loop\n"
]
}
],
"source": [
"%timeit -n100 dict_del(n)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 loops, best of 3: 159 ms per loop\n"
]
}
],
"source": [
"%timeit -n100 dict_pop(n)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 loops, best of 3: 158 ms per loop\n"
]
}
],
"source": [
"%timeit -n100 dict_map(n)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 loops, best of 3: 160 ms per loop\n"
]
}
],
"source": [
"%timeit -n100 dict_map2(n)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 loops, best of 3: 202 ms per loop\n"
]
}
],
"source": [
"%timeit -n100 dict_regen(n)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 loops, best of 3: 222 ms per loop\n"
]
}
],
"source": [
"%timeit -n100 dict_regen2(n)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 loops, best of 3: 198 ms per loop\n"
]
}
],
"source": [
"%timeit -n100 dict_regen3(n)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Jinja2==2.8
MarkupSafe==0.23
Pygments==2.0.2
argparse==1.2.1
backports-abc==0.4
backports.ssl-match-hostname==3.5.0.1
certifi==2015.11.20.1
decorator==4.0.6
functools32==3.2.3-2
ipykernel==4.2.2
ipython==4.0.1
ipython-genutils==0.1.0
ipywidgets==4.1.1
jsonschema==2.5.1
jupyter==1.0.0
jupyter-client==4.1.1
jupyter-console==4.0.3
jupyter-core==4.0.6
mistune==0.7.1
nbconvert==4.1.0
nbformat==4.0.1
notebook==4.0.6
path.py==8.1.2
pexpect==4.0.1
pickleshare==0.5
ptyprocess==0.5
pyzmq==15.1.0
qtconsole==4.1.1
simplegeneric==0.8.1
singledispatch==3.4.0.3
six==1.10.0
terminado==0.6
tornado==4.3
traitlets==4.0.0
wsgiref==0.1.2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment