Commit be019ce0 authored by Paul Sokolovsky's avatar Paul Sokolovsky
Browse files

objdict: Implement construction from iterable of pairs.

Pairs are limited to tuples so far.
parent 12a04392
......@@ -7,6 +7,7 @@
#include "mpconfig.h"
#include "qstr.h"
#include "obj.h"
#include "objtuple.h"
#include "runtime0.h"
#include "runtime.h"
......@@ -39,13 +40,22 @@ STATIC mp_obj_t dict_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp
dict = mp_obj_new_dict(0);
break;
case 1:
case 1: {
if (MP_OBJ_IS_TYPE(args[0], &mp_type_dict)) {
return dict_copy(args[0]);
}
// TODO create dict from an arbitrary mapping!
// TODO create dict from an iterable!
assert(false);
// Make dict from iterable of pairs
mp_obj_t iterable = mp_getiter(args[0]);
mp_obj_t dict = mp_obj_new_dict(0);
// TODO: support arbitrary seq as a pair
mp_obj_tuple_t *item;
while ((item = mp_iternext(iterable)) != MP_OBJ_NULL) {
mp_obj_dict_store(dict, item->items[0], item->items[1]);
}
return dict;
}
default:
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, "dict takes at most 1 argument"));
......
print(dict([(1, "foo")]))
d = dict([("foo", "foo2"), ("bar", "baz")])
print(sorted(d.keys()))
print(sorted(d.values()))
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment